有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Scanner类具有NextLine无限循环

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

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();

    }

}

打印线一直在运行


共 (3) 个答案

  1. # 1 楼答案

    因为hasNexLine()既不获取行,也不更改扫描仪的状态。如果它只有一次是真的,并且没有调用扫描器的其他方法,那么它总是真的

  2. # 2 楼答案

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

    此时,您只是重复调用hasNextLine(它只返回一个^{,它不会修改流),而不从freader检索任何输入,因此如果freader最初在其输入中有另一行^{,它将始终返回true,并且您的循环本质上是while (true)

  3. # 3 楼答案

    因为您必须使用下一行,所以代码应该是:

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

    如果您不调用nextLine(),您将始终在同一行上观看,并且它将始终对这一点做出正确的回答