当我运行程序时,一切似乎都运行正常,但是当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
答案 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)
。