Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的while循环没有停止?_Java_File_While Loop - Fatal编程技术网

Java 为什么我的while循环没有停止?

Java 为什么我的while循环没有停止?,java,file,while-loop,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

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

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,但它会无限期地打印出来。。 我认为问题在于return 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();
    }
}

它是无限递归,因为
findFile()
总是调用自身。非
返回findFile()的内容
是必需的,但不清楚该函数的用途是什么,可能只是:

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

当循环读取第一行后退出时,似乎不需要该循环。

while循环确实停止;问题是,通过从方法本身调用该方法,您正在创建一个无限递归。要解决此问题,您可以执行以下操作之一:

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

或:

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


当然,只有当文件可以打开(否则代码抛出异常)并且文件不是空的(否则它永远不会进入while循环)时,才会出现上述结果

“我认为问题在于返回findFile()”=>猜得好!“我不知道如何修复它。”=>返回其他内容(或不返回任何内容)!递归递归!!“返回null;”!?如果您不想让它返回任何内容,那么将其返回类型从String更改为void;while语句将只运行一次,因为它有一个
中断在其中(在所有情况下在循环期间调用)。你想这么做吗?如果是这样,考虑一个if语句,是的,这是目的,但是我已经尝试了一个if语句,但是它仍然使递归+1。你比我快了7秒。但是在
return sCurrentLine
之前,他必须在
try/catch
块之外将其提取出来。是的,我以为是这样,thx:)这个函数的目的是在按下jb按钮后读取文本文件,并显示其中的内容,但你的意思是什么“//如果在try之前声明了sCurrentLine?@ymerdrengine,则如果要将
sCurrentLine
用作返回值,则需要在
try{}
之外声明它,以便它可见。但是,根据您的描述,函数似乎不需要返回任何内容,因此将返回类型更改为
void
.Thx以获得@zsukosd!我使用了第一个建议:)