Java 为什么我的while循环没有停止?
我不知道为什么我的循环一直在无限循环 URLLinksJava 为什么我的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
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!我使用了第一个建议:)