我有一个文本文件中的值,只有在 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++;
        }
    }
}