Java while(input.hasnextline)循环未退出?

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

所以我应该确定文本文件中的行数(100行包含数字),然后创建一个包含行数的数组,但用于查找文本文件中行数的第一个while循环从不存在。第二个循环是完全相同的循环,工作正常。请帮帮我

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;
        }