我有一个“缺少返回语句”的java方法。我已经对此进行了大量研究,并且知道问题很可能是编译器在'if'函数中找到了一个不提供return语句的路径。但是,应该设置我的while循环,以便当'if'函数中的路径到达不返回任何内容的端点时,它最终会循环整个方法。
该方法的总体目标是让用户输入他们想要输出的文件,但是如果他们选择一个存在的文件然后选择不覆盖它,那么要求新文件名的初始问题是重新执行,直到输入新文件或输入现有文件并且用户同意覆盖它。
TL;博士 我编译时收到一个丢失的返回语句错误,虽然我找不到循环将停止导致方法结束而不返回值的路径。 这是我的代码,有谁知道如何解决这个问题?非常感谢你
public static PrintStream getOutputPrintStream(Scanner console){
boolean done = false;
while (!done) {
System.out.print("Enter output file: ");
File outFile = new File(console.next());
if (outFile.exists()) {
System.out.print("The file " + outFile + " already exists, would you like to overwrite it? (y/n): ");
String overwrite = console.next();
overwrite = overwrite.toLowerCase();
char decision = overwrite.charAt(0);
if (decision == 'y') {
try {
PrintStream output = new PrintStream(outFile);
done = true;
return output;
} catch (FileNotFoundException e){
System.exit(1);
}
}
} else {
try {
PrintStream output = new PrintStream(outFile);
done = true;
return output;
} catch (FileNotFoundException e){
System.exit(1);
}
}
}
}
答案 0 :(得分:1)
在你的while循环条件中,你写了,
C:\Program Files\Spring\spring-1.2.7.RELEASE\bin;
这是错误的,因为while (done = false)
表示assignment操作。您需要比较=
,因此请将其重写为:
丑陋的方法
==
好方法
while (done == false)
但是,您收到错误
此方法必须返回错误
因为你的方法while (!done)
没有,如果你的while循环块不会执行!逻辑上它不可能(因为return
是done
),但编译器不会理解逻辑并引发错误。
变量false
实际上对您的代码没有影响,因为您在done
之后立即从您的函数返回。请注意, done = true
语句会导致执行离开当前子例程。所以你可以使用无限循环,例如:
return
然后你不需要在循环外添加return语句。
答案 1 :(得分:1)
done
变量中没有任何意义,因为在设置done = true
后,您立即return
。你也可以做while(true)
。这将解决缺少的return语句问题,因为编译器将能够看到无法在while
循环之下结束。
目前,当您编写while
而不是while (done = false)
时,可能会在while (done == false)
循环下方结束(第一个生成 {{1假)。但是,即使将其更改为done
或while (done == false)
,您仍会收到编译器错误,因为编译器不够复杂,无法推断while (!done)
永远不会done
检查条件。
答案 2 :(得分:0)
如果代码有一种方法可以运行但是从未达到返回值(例如,如果outFile.exists()为真,则在while循环中但是' decision'不等于')。编译器不够聪明,不能说"哦,但是它在一个while循环中,一旦条件满足就会最终返回"。
对于您的具体示例,请添加
返回null;
在while循环之后应该进行编译。
答案 3 :(得分:0)
$ git log
fatal: your current branch 'master' does not have any commits yet