创建一个程序来读取文本文件并计算5的数量。输出结束了五分之一

时间:2017-11-09 20:54:19

标签: java

当我运行程序时,一切似乎都运行正常,但是当txt文件中实际有9个五个时,它会计算8个五。

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文件内容:

5 9 3 2 0 5 3 0 8 5 5 5 5 9 4 3 0 6 5 5 5

2 个答案:

答案 0 :(得分:1)

这是你的问题:

myFile.hasNextInt(5)

来自hasNextInt(int)方法的文档:

  

如果此扫描仪输入中的下一个标记可以,则返回true   使用nextInt()解释为指定的radix(base)中的int值   方法

如果下一个int值为5,则不会返回true。 如果数字中的每个数字(在这种情况下每个数字只有一位数)<0> <0> (基数5),它将返回true。

所以将你的while循环更改为:

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

这次我们使用不带参数的hasNextInt()(使用基数10,即十进制系统)和nextInt返回给定数字来验证数字实际是5。

答案 1 :(得分:1)

我建议你对你的代码做一些重构。

此解决方案正常运行:

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)