带有if语句的Java布尔方法-“;必须返回布尔类型的结果";
我在布尔方法方面遇到了麻烦带有if语句的Java布尔方法-“;必须返回布尔类型的结果";,java,boolean,Java,Boolean,我在布尔方法方面遇到了麻烦 private boolean askYesNoQuestion(String prompt){ prompt = prompt.toLowerCase(); if(prompt.equals("yes")) return true; if(prompt.equals("no")) return false; else prompt = readLine("Please answer yes or no."); } Eclipse说:“方法必须返回布尔类型的结果”
private boolean askYesNoQuestion(String prompt){
prompt = prompt.toLowerCase();
if(prompt.equals("yes")) return true;
if(prompt.equals("no")) return false;
else prompt = readLine("Please answer yes or no.");
}
Eclipse说:“方法必须返回布尔类型的结果”
以下代码中存在相同的问题:
private boolean isPerfectSquare(int n){
for(int i = 0; i <= n; i++){
if(i*i == n) {
return true;
}
else return false;
}
private boolean isPerfectSquare(int n){
对于(int i=0;i虽然包含一对返回语句,但它们都发生在循环内部。Java检查所有路径,发现循环可以在不进入第一次迭代的情况下完成-例如,因为n
是负数。在这种情况下,if
语句将不执行,因此ld为no返回
您可以在循环后包含一个无条件返回来修复此问题。但是,看起来您的逻辑被破坏了:如果您完全进入了循环,您将立即返回,而不会完成第一次迭代。看起来您打算编写以下内容:
private boolean isPerfectSquare(int n){
for(int i = 0; i <= n; i++){
if(i*i == n) {
return true;
}
}
return false;
}
private boolean isPerfectSquare(int n){
对于(int i=0;i,您需要在方法本身的范围内返回一些东西(true或false),因为您的返回语句当前在if语句之外不“可见”
实际上,您可以在第二个方法中省略else语句。对于第一个方法,只需在最后一个else之外返回false即可。每个执行路径都必须返回布尔值。在第一个示例中,else prompt=readLine(“请回答是或否”);
不返回布尔值您需要在for循环后返回布尔值。如果n=-1,则不会执行'if'语句。首先,尝试格式化代码,以便更容易遵循逻辑。在第一个代码中,出现错误的原因是该方法可能不返回任何值ing。如果提示符不是“是”且不是“否”,它将转到else语句。程序将运行readLine,并在不返回任何内容的情况下退出该方法。您要做的是在while循环中运行readLine,该循环在输入“是”或“否”之前不会终止
对于第二个问题,您有一个逻辑问题。如果n不是0,您的方法将始终返回false。您应该将返回false行移到For循环之外。在else语句的第一个块中,您没有返回任何内容。
这个改变会使它好起来的
private boolean askYesNoQuestion(String prompt){
prompt = prompt.toLowerCase();
if(prompt.equals("yes"))
return true;
if(prompt.equals("no"))
return false;
else {
prompt = readLine("Please answer yes or no.");
return [true or false]
}
}
在第二个块中,若n是负值,那个么for语句将不会运行,所以其中并没有return语句。
这样就可以了
private boolean isPerfectSquare(int n){
for(int i = 0; i <= n; i++){
if(i*i == n) {
return true;
}
else
return false;
}
return [true or false]
}
private boolean isPerfectSquare(int n){
对于(int i=0;i如果一个方法被声明为返回某个值,则所有代码路径都必须返回一个值。您有两个代码路径确实返回值,一个不返回值。格式化代码后,问题就更清楚了:
private boolean askYesNoQuestion(String prompt) {
prompt = prompt.toLowerCase();
if (prompt.equals("yes")) {
return true;
}
if (prompt.equals("no")) {
return false;
} else {
prompt = readLine("Please answer yes or no.");
}
// You must return a boolean value here
}
最后的else
语句是多余的-如果prompt
等于no
,则不会执行进一步的代码。您可以将其删除,然后在适当的位置添加另一个return false
:
private boolean askYesNoQuestion(String prompt) {
prompt = prompt.toLowerCase();
if (prompt.equals("yes")) {
return true;
}
if (prompt.equals("no")) {
return false;
}
writeLine("Please answer yes or no.");
return false;
}
这可以进一步简化。作为消除bug的第一步,代码格式可能非常重要。重新格式化第二个示例,看看是否可以找出需要什么和不需要什么。感谢大家。似乎“return”语句必须位于任何循环之外(例如for或while)。以下代码产生了良好的结果
public class Test1 extends ConsoleProgram {
public void run() {
String prompt = readLine("Would you like instructions?");
prompt = prompt.toLowerCase();
while(!prompt.equals("yes") && !prompt.equals("no")){
prompt = readLine("Please answer yes or no.");
prompt = prompt.toLowerCase();
}
if(askYesNoQuestion(prompt)) println("Here are the instructions.");
else println("Please start the test.");
println(askYesNoQuestion(prompt));
}
private boolean askYesNoQuestion(String prompt){
if(prompt.equals("yes")) {
return true;
}
else return false;
}
}
如果“return”语句在循环之外,第二个程序也可以工作:
private boolean isPerfectSquare(int n){
int i = 0;
while (i*i != n ) {
if (i*i > n) break;
i ++;
}
return (i*i == n);
}
请把代码格式化一点。