我有一个方法,其中包含带有return的if和else语句,并且它仍然说它缺少return语句
public boolean isPalindrome(String str){
int n = str.length();
for( int i = 0; i < n/2; i++ ){
if (str.charAt(i) != str.charAt(n-i-1)){
return false;
}
else{
return true;
}
}
}
不确定该怎么做,任何建议都会受到赞赏。
答案 0 :(得分:2)
要找到这种编译错误,您需要遵循该方法的所有路径。
在这种情况下,如果n
为零(对于零长度字符串),则永远不会输入for循环,因此没有return语句:
public boolean isPalindrome(String str){ // when str = ""
int n = str.length(); // n = 0
for( int i = 0; i < 0; i++ ){ // never enters the loop
// no code executed in here
}
// return statement is missing here
}
似乎(正如@ElliotFrisch指出的那样)你可能想要在for循环之外而不是在else块中使用return true;
语句。
答案 1 :(得分:2)
您无法立即返回else
(因为您只会检查第一个字符)。你需要像
public boolean isPalindrome(String str) {
int n = str.length();
for (int i = 0; i < n / 2; i++) {
if (str.charAt(i) != str.charAt(n - i - 1)) {
return false;
}
}
return true;
}
或强>
public boolean isPalindrome(String str) {
return new StringBuilder(str).reverse().toString().equals(str);
}
或如果您正在使用带有IntStream
和allMatch
的Java 8+
public static boolean isPalindrome(String str) {
return IntStream.range(0, str.length() / 2) //
.allMatch(i -> str.charAt(i) == str.charAt(str.length() - i - 1));
}
或强>
public static boolean isPalindrome(String str) {
return IntStream.range(0, str.length() / 2) //
.noneMatch(i -> str.charAt(i) != str.charAt(str.length() - i - 1));
}
答案 2 :(得分:0)
删除其他人。这样做:
public boolean isPalindrome(String str){
int n = str.length();
for( int i = 0; i < n/2; i++ ){
if (str.charAt(i) != str.charAt(n-i-1)){
return false;
}
}
return true;
}
因为如果if里面的语句不是真的那么它会转到外面并且只返回不适用条件的值。