Java 创建一个程序从文本文件中读取并计算5';s输出减少了1/5

Java 创建一个程序从文本文件中读取并计算5';s输出减少了1/5,java,Java,当我运行这个程序时,一切似乎都很好,除了在txt文件中有9个5的时候,它计数为8个5 import java.io.*; import java.util.*; public class FileIO2 { public static void main(String[] args) { Scanner kb = new Scanner(System.in); String filename = "Input1.txt"; Scanner myFile

当我运行这个程序时,一切似乎都很好,除了在txt文件中有9个5的时候,它计数为8个5

import java.io.*;
import java.util.*;
public class FileIO2
{
    public static void main(String[] args)
    {
    Scanner kb = new Scanner(System.in);

    String filename = "Input1.txt";

    Scanner myFile = null;
    try
    {
        myFile = new Scanner(new FileInputStream(filename));
    }
    catch(Exception e)
    {
        System.out.println("File not found.");
        System.exit(0);  //close the program
    }


    int countNums = 0;
    while(myFile.hasNext())
    {
        if(myFile.hasNextInt(5))
        {
            countNums++;
        }
        myFile.next();  
    }
    System.out.println("There were " + countNums + " fives in " + filename);
    }
}
Input1.txt文件内容:

5923053055 5 9 4 3 0 6 5这是你的问题:

myFile.hasNextInt(5)
从方法的文档中:

如果此扫描仪输入中的下一个令牌可以 使用nextInt()将其解释为指定(基)中的int值 方法

因此,如果下一个int值如您所期望的那样为5,则不会返回true。如果数字中的每个数字(本例中的每个数字只有一个数字)在0-4之间(基数5)

因此,将while循环更改为:

while(myFile.hasNext())
{
    if(myFile.hasNextInt() && myFile.nextInt() == 5)
    {
        countNums++;
    }
}
这一次,我们使用无参数(使用基数10,即十进制)验证数字实际上是5,并且返回给定的数字。

这是您的问题:

myFile.hasNextInt(5)
从方法的文档中:

如果此扫描仪输入中的下一个令牌可以 使用nextInt()将其解释为指定(基)中的int值 方法

因此,如果下一个int值如您所期望的那样为5,则不会返回true。如果数字中的每个数字(本例中的每个数字只有一个数字)在0-4之间(基数5)

因此,将while循环更改为:

while(myFile.hasNext())
{
    if(myFile.hasNextInt() && myFile.nextInt() == 5)
    {
        countNums++;
    }
}

这一次,我们使用无参数(使用基数10,即十进制)验证数字实际上是5,并且返回给定的数字。

我建议您对代码进行重构

此解决方案效果良好:

public class FileIO2 {
    private static final String PATH_TO_FILE = "/home/user/temp/Input1.txt";
    private static final int NUMBER_TO_FIND = 5;

    public static void main(String[] args) throws FileNotFoundException {
        int counter = 0;

        try (Scanner scanner = new Scanner(new File(PATH_TO_FILE))) {
            while (scanner.hasNextInt()) {
                int currentInt = scanner.nextInt();
                if (currentInt == NUMBER_TO_FIND) {
                    counter++;
                }
            }
        }

        System.out.println("There were " + counter + " fives in " + PATH_TO_FILE);
    }
}

代码中有问题的一行是myFile.hasnetint(5)

我建议您对代码进行重构

此解决方案效果良好:

public class FileIO2 {
    private static final String PATH_TO_FILE = "/home/user/temp/Input1.txt";
    private static final int NUMBER_TO_FIND = 5;

    public static void main(String[] args) throws FileNotFoundException {
        int counter = 0;

        try (Scanner scanner = new Scanner(new File(PATH_TO_FILE))) {
            while (scanner.hasNextInt()) {
                int currentInt = scanner.nextInt();
                if (currentInt == NUMBER_TO_FIND) {
                    counter++;
                }
            }
        }

        System.out.println("There were " + counter + " fives in " + PATH_TO_FILE);
    }
}

代码中有问题的一行是myFile。hasNextInt(5)

结果是OP计算了除五个或五个以上以外的任何东西。@AlecA请阅读:?结果是OP计算了除五个或五个以上以外的任何东西。@AlecA请阅读:?