我不知道为什么我的循环无限循环。
URLLinks
public String findFile() {
try (BufferedReader br = new BufferedReader(
new FileReader("urls.txt"))) {
String sCurrentLine;
if ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return findFile();
}
我只想打印一次sCurrentLine,但它会无限打印出来。 我认为这些问题存在于返回findFile()中,但我不知道如何修复它。
干杯
再次更新UPDATE更新
我通过将方法findFile()
设置为void
来修复了问题,并从while循环更改为if语句
URLLinks更新代码
public void findFile() {
try (BufferedReader br = new BufferedReader(
new FileReader("urls.txt"))) {
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:7)
它是无限递归,因为findFile()
总是调用自身。除了return findFile();
之外还需要其他东西,但目前还不清楚该函数的用途是什么,也许只是:
return sCurrentLine; // with 'sCurrentLine' declared prior try
循环似乎不需要,因为它在读取第一行后退出。
答案 1 :(得分:1)
while循环停止;问题是你通过从内部调用方法来创建无限递归。要解决这个问题,您可以执行以下操作之一:
1)将方法的返回类型更改为void,并删除return语句。然后该方法不会返回任何内容,只需在打印第一行后退出(由于break语句)。
或:
2)改为返回一个字符串,例如。 sCurrentLine,在你当前的代码中只占用文件中第一行的值(由于while循环中的break语句)。
上述结果当然只会在文件可以打开时发生(否则代码抛出异常),如果文件不为空(否则它将永远不会进入while循环)。