我遇到布尔方法问题。
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说:" 该方法必须返回boolean类型的结果"。
以下代码中的相同问题:
private boolean isPerfectSquare(int n){
for(int i = 0; i <= n; i++){
if(i*i == n) {
return true;
}
else return false;
}
我想我已经在语句中包含了return
,除了它们是在if
语句之后。
答案 0 :(得分:5)
虽然你确实包含了一对return语句,但它们都发生在循环中。 Java检查所有路径,并发现循环可以在不进入第一次迭代的情况下完成 - 例如,因为n
是否定的。在这种情况下,if
语句不会被执行,因此不会有return
。
您可以在循环后包含无条件返回来修复此问题。但是,看起来您的逻辑被破坏了:如果您完全进入循环,您将立即返回,而不会完成第一次迭代。看起来你打算写这个:
private boolean isPerfectSquare(int n){
for(int i = 0; i <= n; i++){
if(i*i == n) {
return true;
}
}
return false;
}
答案 1 :(得分:0)
您需要在方法本身的范围内返回一些内容(true或false),因为您的return语句当前在if语句之外不是“可见的”。
您实际上可以省略第二种方法中的else语句。对于第一个,只需在最后一个之外返回false。
答案 2 :(得分:0)
每个执行路径都必须返回一个布尔值。在您的第一个示例中,else prompt = readLine("Please answer yes or no.");
不返回布尔值
答案 3 :(得分:0)
你需要在for循环后返回一个布尔值。如果,假设n = -1,则不会执行'if'语句。
答案 4 :(得分:0)
首先,尝试格式化代码,以便更容易遵循逻辑。在第一个代码中,您收到错误的原因是因为该方法可能无法返回任何内容。如果提示不是,而不是否,则会转到else语句。该程序将运行readLine,并退出该方法而不返回任何内容。你想要做的是在while循环中运行readline,它不会终止,直到输入yes或no。
对于第二个问题,您遇到了逻辑问题。如果n不为0,则您的方法将始终返回false。你应该把返回假行放在for循环之外。
答案 5 :(得分:0)
在你声明的第一个块中,你还没有回复任何东西。 这个改变会让它变好。
Select Count(Distinct Value) AS OpenPO
FROM OpenPOs
AND
Select Count(Distinct Value) As OpenSho
From OpenSho
在第二个块中,如果n是负值,那么语句将不会运行,因此那里没有return语句。 所以这样就好了。
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]
}
}
答案 6 :(得分:0)
如果声明方法返回某些内容,则所有代码路径都必须返回一个值。您有两个代码路径可以返回一个值,而另一个代码路径没有返回值。格式化代码,问题变得更加清晰:
o_1=(w_1*i_1+w_2*i_2)*w_r*w_3
您的最终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
这可以进一步简化。作为消除错误的第一步,代码格式化非常重要。重新格式化您的第二个示例,看看您是否能够找出所需要的内容以及不需要的内容。
答案 7 :(得分:0)
感谢大家。似乎&#34;返回&#34;语句必须在任何循环之外(例如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;
}
}
如果&#34;返回&#34;第二个程序也有效。声明在循环之外:
private boolean isPerfectSquare(int n){
int i = 0;
while (i*i != n ) {
if (i*i > n) break;
i ++;
}
return (i*i == n);
}