问题出在哪里?如果我使用变量它可以正常工作,但我错过了一些东西。
public boolean xyzThere(String str) {
if (str.length() > 2){
if(str.startsWith("xyz")){
return true;
} else {
for (int i = 1; i < str.length() - 2; i++){
if(str.substring(i, i + 3).equals("xyz") && !str.substring(i - 1, i).equals(".")) {
return true;
} else {
return false;
}
}
}
} else {
return false;
}
}
答案 0 :(得分:1)
这个条件需要一个return语句,因为for循环中的代码可能无法访问。
else {
for (int i = 1; i < str.length() - 2; i++) {
if (str.substring(i, i + 3).equals("xyz") && !str.substring(i - 1, i).equals(".")) {
return true;
} else {
return false;
}
}
}
答案 1 :(得分:0)
Java编译器不会评估条件,以确定是否可以保证if
条件和else if
条件之一运行。
如果没有条件,编译器会看到两个条件都不是true
的可能性,在这种情况下,不返回任何内容。 return
之后没有else if
个语句。即使我们发现逻辑上其中一个将是true
,也会发生这种情况。
只需将else if
转换为else
即可满足编译器。
else {
return false;
}
现在,编译器将看到所有可能的执行路径中都有return
语句。
在这些情况下,有时我会评论条件,让读者知道真正的意图。
else // if (str.length() < 3)
{
return false;
}
<强>更新强>
在for
循环内发生了类似的事情。编译器不会假设将发生for
循环的至少一次迭代。如果永远不会输入for
循环体,则else
块结束,外部if
块的正文结束时没有return
语句。
如果永远不会输入return
循环,则必须在for
循环后提供for
语句。
答案 2 :(得分:0)
因为您的outer if
条件可能无法成功,所以 编译器 会确保您的程序不会陷入此功能,抛出missing return statement
错误
所以试试这个:
if(condition){
return false;
}
elseif(condition){
return true;
}
return false; <--- Now compiler is assured that function will return something
假设返回类型为 布尔
答案 3 :(得分:0)
现在正在编译:
public boolean xyzThere(String str) {
if (str.length() < 3){
return false;
} else {
if(str.startsWith("xyz")){
return true;
} else {
for (int i = 1; i < str.length() - 2; i++){
if(str.substring(i, i + 3).equals("xyz") && !str.substring(i - 1, i).equals(".")) {
return true;
} else {
}
}
return false;
}
}
}