【问题标题】:Scanner Class hasNextLine infinite loopScanner 类 hasNextLine 无限循环
【发布时间】:2011-12-19 22:17:02
【问题描述】:

为什么当我尝试给它一个基本的文本文件时,这段代码会进入无限循环?

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
public class TestFile
{

    public static void main(String args[]) throws IOException
    {
            // Read in input file                                                                                                                                            
            File input = new File(args[0]);
            Scanner freader = new Scanner(input);
            while (freader.hasNextLine()) {
                System.out.println("hi");
            }

            freader.close();

    }

}

打印线一直在继续。

【问题讨论】:

  • (为什么返回true后又返回false?)
  • @Matt,请不要在您的帖子上签名。添加到您帖子中的耀斑是您的签名。

标签: java file loops input


【解决方案1】:

因为hasNexLine() 既没有得到线路也没有改变扫描仪的状态。如果一次为真,并且没有调用扫描仪的其他方法,则它永远为真。

【讨论】:

    【解决方案2】:

    因为你要消费nextLine所以代码应该是:

    while ( theScanner.hasNextLine() ) {
        String theLine = theScanner.nextLine();
    }
    

    如果您不调用nextLine(),您将始终在同一行观看,并且它始终会正确回答。

    【讨论】:

      【解决方案3】:

      添加对nextLine 或任何其他Scanner 方法的调用,这些方法将读取while 循环内的某些输入。

      目前您只是重复调用hasNextLine返回一个boolean,它不会修改流)而没有从freader检索任何输入,所以如果freader 最初在其输入中有另一行 hasNextLine总是返回 true 并且您的循环本质上是 while (true)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-08
        • 2022-01-06
        相关资源
        最近更新 更多