Java while(input.hasnextline)循环未退出?
所以我应该确定文本文件中的行数(100行包含数字),然后创建一个包含行数的数组,但用于查找文本文件中行数的第一个while循环从不存在。第二个循环是完全相同的循环,工作正常。请帮帮我Java while(input.hasnextline)循环未退出?,java,file,io,Java,File,Io,所以我应该确定文本文件中的行数(100行包含数字),然后创建一个包含行数的数组,但用于查找文本文件中行数的第一个while循环从不存在。第二个循环是完全相同的循环,工作正常。请帮帮我 static void main(String[] args) throws Exception{ java.io.File file = new java.io.File("seriesOfNumbers.txt"); //file instance Scanner
static void main(String[] args) throws Exception{
java.io.File file = new java.io.File("seriesOfNumbers.txt"); //file instance
Scanner input = new Scanner(file); //Scanner
int M =0 ;
while (input.hasNextLine() && !input.equals(null))// ** Loop never exits, tried almost everything
{
k++;
}
double[] numberArray = new double[k];
int V = 0;
while (input.hasNextLine())// When I exit the first loop this one exits just fine
{
numberArray[j] = (double) input.nextInt();
j++;
}
您永远不会在第一个循环中使用输入,请使用
input.nextLine()
您现在正在循环,直到input.hasNextLine()
变为false,但这永远不会发生,因为您不使用输入。使用input.next()移动到下一行。在While条件下,您正在检查has next line且不为null。也就是说,它在无限循环中。在下面的代码中,
这是初始化
Scanner input = new Scanner(file); //Scanner
这是阅读
int M =0 ;
while (input.hasNextLine() && !input.equals(null))
{
input.nextLine(); // Use this to advance the lines from scanner
k++;
}
在我看来,您可以使用apache.commons.io项目中的FileUtils类来完成这个任务
static void main(String[] args) throws Exception{
List<String> lines = FileUtils.readLines(new File("..."));
也可以使用集合进行迭代
for (String line : lines) {
double n = Double.parseDouble(line);
要使用FileUtils,请查看
但是,如果您只想知道代码有什么问题,那么应该在第一个while循环中调用方法
Scanner.nextLine()
。为了停止while循环的无限循环,即使在消耗了所需的输入之后,我们也可以使用break
语句
举个例子,
while (scanner.hasNextLine()) {
String[] arr = scanner.nextLine().split(" ");
long[] ar = new long[n];
for (int i = 0; i < n; i++) {
ar[i] = Long.parseLong(arr[i]);
}
long result = sum(ar);
System.out.println(result);
break;
}
while(scanner.hasNextLine()){
字符串[]arr=scanner.nextLine().split(“”);
long[]ar=新长[n];
对于(int i=0;i
如果您从未推进扫描仪,则应调用其.next*
方法之一。小心输入。等于(null)
。如果input
确实是null
,您将得到NullPointerException
。使用input!=空
代替谢谢你的回答!它解决了我的问题。@user3454973如果有答案解决了你的问题,请将答案标记为已接受。
while (scanner.hasNextLine()) {
String[] arr = scanner.nextLine().split(" ");
long[] ar = new long[n];
for (int i = 0; i < n; i++) {
ar[i] = Long.parseLong(arr[i]);
}
long result = sum(ar);
System.out.println(result);
break;
}