我有一个文本文件中的值,只有在 0 和 100 之间才能计数,我的代码不断跳过第一个值
I have values from a text file that can only be counted if they are between 0 & 100, my code keeps skipping the first value
我想使我从文本文件中计算的值只能在 0 到 100 之间,不能小于 0 或大于 100。文本文件中的值以空格分隔有时线
例如:57 59 38 60
49 24 60 39
我放入了一个 if 条件,但它似乎遗漏了第一个数字,即使该数字在条件范围内,我认为这是因为我的变量 num,但我不确定如何解决这个问题。
这是我的代码:
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class ExamStats {
static final int A = 90,
B = 80,
C = 70,
D = 60;
public static void main(String[] args) throws IOException {
double minimumScore = 0;
double maximumScore = 0;
//total count of various grades
int totalCount = 0;
double average = 0;
double sum = 0;
Scanner input = new Scanner(System.in);
//asks for file's name
System.out.print("Input File's name: " );
String inputFile = input.nextLine();
//reads the files data
File file = new File(inputFile);
Scanner scanFile = new Scanner(file);
int num = scanFile.nextInt();
if(num >= 0 && num <= 100) {
while(scanFile.hasNextInt()) {
sum += scanFile.nextInt();
totalCount++;
}
}
average = sum/totalCount;
System.out.println("Number of scores: " + totalCount);
System.out.printf("Average score: %.2f\n", average);
scanFile.close();
您需要将条件移动到 while 循环中。
这会检查第一个数字是否在 [0,100] 范围内,然后执行一些代码:
int num = scanFile.nextInt();
if(!(num < 0 && num > 100)) {
while(scanFile.hasNextInt()) {
...
num = scanFile.nextInt();
}
}
这会检查当前读数线是否在 [0,100] 范围内,只有在为真时才会执行一些代码:
while(scanFile.hasNextInt()) {
int num = scanFile.nextInt();
if(!(num < 0 && num > 100)) {
...
}
}
如果您想检查所有数字是否都在该范围内,只需在 'if' 代码中使用布尔值即可。
另外,有些文件的末尾有'\n'。我通常使用 scanFile.readLine()
然后将其解析为 int:
while(scanFile.hasNextLine()) {
int num = Integer.parseInt(scanFile.readLine());
if(!(num < 0 && num > 100)) {
...
}
}
我想你需要这样的东西。
while (scanFile.hasNextInt()) {
int num = scanFile.nextInt();
if (num >= 0 && num <= 100) {
sum += num;
totalCount++;
}
}
提前退出的可能原因是如果文件中的第一行小于零或大于100。在这种情况下它永远不会进入then-block ( if(!(num < 0 && num > 100)){
.
用于逐行扫描多个值。您应该逐行扫描(字符串)。然后将每一行拆分为一个数字数组(按 space " "
拆分)。最后,数组中的每个数组元素都变成一个数字。
while (scanFile.hasNextInt()) {
String line = scanFile.nextLine();
String[] numbers = line.split(" ");
for (String number : numbers) {
int num = Integer.parseInt(number);
if (num >= 0 && num <= 100) {
sum += num;
totalCount++;
}
}
}
我想使我从文本文件中计算的值只能在 0 到 100 之间,不能小于 0 或大于 100。文本文件中的值以空格分隔有时线 例如:57 59 38 60 49 24 60 39 我放入了一个 if 条件,但它似乎遗漏了第一个数字,即使该数字在条件范围内,我认为这是因为我的变量 num,但我不确定如何解决这个问题。 这是我的代码:
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class ExamStats {
static final int A = 90,
B = 80,
C = 70,
D = 60;
public static void main(String[] args) throws IOException {
double minimumScore = 0;
double maximumScore = 0;
//total count of various grades
int totalCount = 0;
double average = 0;
double sum = 0;
Scanner input = new Scanner(System.in);
//asks for file's name
System.out.print("Input File's name: " );
String inputFile = input.nextLine();
//reads the files data
File file = new File(inputFile);
Scanner scanFile = new Scanner(file);
int num = scanFile.nextInt();
if(num >= 0 && num <= 100) {
while(scanFile.hasNextInt()) {
sum += scanFile.nextInt();
totalCount++;
}
}
average = sum/totalCount;
System.out.println("Number of scores: " + totalCount);
System.out.printf("Average score: %.2f\n", average);
scanFile.close();
您需要将条件移动到 while 循环中。
这会检查第一个数字是否在 [0,100] 范围内,然后执行一些代码:
int num = scanFile.nextInt();
if(!(num < 0 && num > 100)) {
while(scanFile.hasNextInt()) {
...
num = scanFile.nextInt();
}
}
这会检查当前读数线是否在 [0,100] 范围内,只有在为真时才会执行一些代码:
while(scanFile.hasNextInt()) {
int num = scanFile.nextInt();
if(!(num < 0 && num > 100)) {
...
}
}
如果您想检查所有数字是否都在该范围内,只需在 'if' 代码中使用布尔值即可。
另外,有些文件的末尾有'\n'。我通常使用 scanFile.readLine()
然后将其解析为 int:
while(scanFile.hasNextLine()) {
int num = Integer.parseInt(scanFile.readLine());
if(!(num < 0 && num > 100)) {
...
}
}
我想你需要这样的东西。
while (scanFile.hasNextInt()) {
int num = scanFile.nextInt();
if (num >= 0 && num <= 100) {
sum += num;
totalCount++;
}
}
提前退出的可能原因是如果文件中的第一行小于零或大于100。在这种情况下它永远不会进入then-block ( if(!(num < 0 && num > 100)){
.
用于逐行扫描多个值。您应该逐行扫描(字符串)。然后将每一行拆分为一个数字数组(按 space " "
拆分)。最后,数组中的每个数组元素都变成一个数字。
while (scanFile.hasNextInt()) {
String line = scanFile.nextLine();
String[] numbers = line.split(" ");
for (String number : numbers) {
int num = Integer.parseInt(number);
if (num >= 0 && num <= 100) {
sum += num;
totalCount++;
}
}
}