我正在尝试读取一个包含java中整数值的文件,我找到了以下答案:
Java: Reading integers from a file into an array
但我的代码陷入无限循环。
我的代码是:
Scanner scanner = new Scanner(new File("/home/lalit/Desktop/Project/key_x.txt"));
//Scanner scanner1 = new Scanner(new File("/home/lalit/Desktop/Project/key_y.txt"));
int i = 0,count=0;
while(scanner.hasNextInt())
{
System.out.println("This is count "+count);
count++;
}
上面的代码无限循环。
我的文字文件包含:
317
40
280
10
318
24
456
126
4
129
404
468
287
275
165
我还有一个问题,当我尝试将元素存储在int数组中然后抛出异常;
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Hybrid.Image.main(Image.java:503)
我存储数组元素的代码是:
int tall[] =new int[count];
int tall1[] =new int[count];
while(scanner.hasNextInt())
{
int k=scanner.nextInt();
tall[i] =k;
System.out.println(tall[i]);
i++;
}
答案 0 :(得分:4)
循环永远不会结束,因为条件永远不会改变。您只检查扫描仪是否 a"下一个int
",您实际上从未真正读过int
。因此,它随时可以阅读文件中的第一个int
。
如果您不关心int
是什么,只想从扫描仪中读取它,您可以这样做,只需忽略该值:
while(scanner.hasNextInt())
{
scanner.nextInt();
System.out.println("This is count "+count);
count++;
}
或者,如果您做想要对int
实际执行某些操作,那么它将返回scanner.nextInt()
的返回值。
答案 1 :(得分:1)
如下所示更改您的代码,因为您永远不会获取该值。
Scanner scanner = new Scanner(new File("/home/lalit/Desktop/Project/key_x.txt"));
//Scanner scanner1 = new Scanner(new File("/home/lalit/Desktop/Project/key_y.txt"));
int i = 0,count=0;
while(scanner.hasNextInt())
{
scanner.nextInt()
System.out.println("This is count "+count);
count++;
}
答案 2 :(得分:0)
当您创建Scanner
时,它具有内部状态。当您使用scanner.nextXXX()
API从中获取数据时,可以更改此状态。
scanner.hasNextInt()
不会更改状态。只检查它。虽然scanner.nextInt()
确实改变了它的状态,然后在你下次调用它时,它会获取下一段数据。
答案 3 :(得分:0)
你忘了移动光标。
扫描仪通过读取输入流来工作。您可以想象将整个文件放在一个长字符串中,然后将光标放在它的开头。然后当你调用.hasNextInt()时,你会询问扫描器当前位置光标前面是否有整数。如果有,它将返回true但实际上不会移动光标。只有在调用nextInt()时光标才会移动。而scanner.nextInt()也将返回一个整数。