为什么当我尝试给它一个基本的文本文件时,这段代码会进入无限循环?
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();
}
}
印刷线一直在继续。
答案 0 :(得分:11)
因为hasNexLine()
既没有得到线也没有改变扫描仪的状态。如果它是真的一次,并且没有其他扫描方法被调用,它将永远是真的。
答案 1 :(得分:9)
因为你必须使用nextLine所以代码应该是:
while ( theScanner.hasNextLine() ) {
String theLine = theScanner.nextLine();
}
如果你没有调用nextLine()
,你将始终在同一条线上观看,它总是会回答这个问题。
答案 2 :(得分:4)
添加对nextLine
或任何其他Scanner
方法的调用,这些方法会在while
循环内的某些输入中读取。
目前您只是反复调用hasNextLine(仅返回boolean
,它不会修改流)而不从{{检索任何输入1}},所以如果freader
最初在其输入freader
中有另一行,则始终将返回true,并且您的循环基本上为hasNextLine
。