【发布时间】:2017-01-24 20:34:01
【问题描述】:
谁能明白为什么这会导致我的 Java servlet 挂起?编译但 CPU 达到 100%,所以我假设某处存在无限循环..?
quotes.txt 只有 10 行。
String line = "";
try {
String filePath = new File("").getAbsolutePath();
filePath += "/quotes.txt";
Scanner scan = new Scanner(filePath);
int lines = 0;
while (scan.hasNextLine()) {
lines++;
}
Random random = new Random();
int randomInt = random.nextInt(lines);
for (int i = 0; i < randomInt; i++) {
line = scan.nextLine();
}
scan.close();
} catch (Exception e){
line = e.getMessage();
}
谢谢
【问题讨论】:
-
你的 while 循环检查它是否有下一行,但从不读取下一行
-
while (scan.hasNextLine())- 在此循环中,您从未从扫描仪读取数据。因此,即使只有一行,也将永远有“下一行”可用。 -
@A.A.第一个循环计算行数,以便第二个循环仅选择文件中实际存在的随机行数。
-
@David 啊,也许我误解了 .hasNextLine。我正在寻找“循环和计数行直到文件结束”效果
-
@StephenOrr 而不是
Scanner使用Files#readAllLines方法。它返回一个List<String>
标签: java infinite-loop