0

我不知道为什么我的循环一直在无限循环..

网址链接

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()但我不知道如何解决它。

干杯

更新 更新 再次更新

我通过将方法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();
    }
}
4

2 回答 2

7

findFile()它总是自称是无限递归。除了需要之外的东西return findFile();,但不清楚该功能的目的是什么,也许只是:

return sCurrentLine; // with 'sCurrentLine' declared prior try

该循环似乎不需要,因为它在读取第一行后退出。

于 2013-05-27T15:14:32.633 回答
1

while 循环确实停止了;问题是您通过从自身内部调用该方法来创建无限递归。为了解决这个问题,您可以例如执行以下操作之一:

1)将方法的返回类型改为void,并删除return语句。然后该方法将不会返回任何内容,只是在打印第一行后退出(由于 break 语句)。

或者:

2)改为返回一个字符串,例如。sCurrentLine,在您当前的代码中,它将只取文件中第一行的值(由于 while 循环中的 break 语句)。

上述结果当然只有在文件可以打开(否则代码抛出异常)并且文件不为空(否则永远不会进入while循环)的情况下才会发生。

于 2013-05-27T15:25:41.823 回答