为什么我的while循环不会停止?

时间:2013-05-27 15:13:22

标签: java file while-loop

我不知道为什么我的循环无限循环。

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

2 个答案:

答案 0 :(得分:7)

它是无限递归,因为findFile()总是调用自身。除了return findFile();之外还需要其他东西,但目前还不清楚该函数的用途是什么,也许只是:

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

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

答案 1 :(得分:1)

while循环停止;问题是你通过从内部调用方法来创建无限递归。要解决这个问题,您可以执行以下操作之一:

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

或:

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

上述结果当然只会在文件可以打开时发生(否则代码抛出异常),如果文件不为空(否则它将永远不会进入while循环)。