1

缺少返回语句的错误。有人知道代码有什么问题吗?

import java.text.*;
public class Sentence {
    private String text;
    public Sentence(String str) {
        str = text;
    }
    public boolean isPalindrome() {
        int length = text.length();
        for(int n = 0;n <= length/2;n++) {
            char letterFromFront = text.charAt(n);
            char letterFromBack = text.charAt(length);
            if(letterFromFront == letterFromBack) {
                return true;
            }else {
                return false;
            }
        }
    }
} 
4

6 回答 6

3

它抱怨是因为如果它不进入for循环就不会有任何回报。

请在循环后添加return语句。for

另请注意:n++在您的for循环中是一个死代码,因为您在第一次迭代本身中返回。

于 2012-10-23T16:45:36.653 回答
1

有人知道代码有什么问题吗?

正是它所说的。

这么说吧:如果字符串为空,你认为这会返回什么?(事实上​​,它会抛出一个异常,因为你可能希望你的上限是独占的而不是包容的,但从根本上说你需要考虑它永远不会进入循环体的情况。)

这段代码还有其他问题,请注意:

  • text.charAt(length)总是会抛出异常
  • 真的是想总是在第一次迭代中返回吗?这表明 xabcx 是一个回文...(提示:您只有true在完成循环后才能有效返回...)
于 2012-10-23T16:43:43.437 回答
1

例如,如果length-2(诚然不可能发生),您的循环将永远不会运行,并且您将不会返回任何内容。

您需要在循环之后添加一个 return 语句以满足编译器的要求,或者在循环之前更好,检查长度是否为>1,如果不是则返回 true/false。

您的代码中还有其他问题,但这就是编译器错误的原因。

于 2012-10-23T16:43:58.617 回答
1

您的代码没有考虑 n 不小于或等于 的情况length/2

我想如果它不是回文,这意味着无论发生什么,你都想返回 false。

public class Sentence {
    private String text;
    public Sentence(String str) {
        str = text;
    }
    public boolean isPalindrome() {
        boolean value = false;
        int length = text.length();
        for(int n = 0;n <= length/2;n++) {
            char letterFromFront = text.charAt(n);
            char letterFromBack = text.charAt(length);
            if(letterFromFront == letterFromBack) {
                value = true;
            }else {
                value = false;
            }
        }
       return value;
    }
} 
于 2012-10-23T16:51:38.490 回答
1

实际上return false应该放在循环之后,否则它总是运行一次

public boolean isPalindrome() {
    int length = text.length();
    for(int n = 0;n <= length/2;n++) {
        char letterFromFront = text.charAt(n);
        char letterFromBack = text.charAt(length);
        if(letterFromFront == letterFromBack) {
            return true;
        }
    }
    return false;
}
于 2012-10-23T17:09:51.427 回答
0

从 else 子句中删除 return 语句并在循环结束之前移动。因此,如果数字是回文,则它属于 if 子句并返回 true,否则返回 false。从理论上讲,您的代码是正确的,但编译器不会这样看。

于 2012-10-23T16:44:34.577 回答