缺少返回语句编译错误

时间:2012-10-23 16:42:40

标签: java

缺少return语句的错误。任何人都知道代码有什么问题吗?

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;
            }
        }
    }
} 

6 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

  

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

正是它所说的。

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

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

  • text.charAt(length)将抛出异常,总是
  • 真的是否总是在第一次迭代中返回?这表明xabcx是一个回文...(提示:当你完成循环时,你只能有效地返回true ...)

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

当n不小于或等于length/2时,您的代码不会考虑这种情况。

我认为,如果不是回文意味着无论发生什么,你都想要返回假。

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;
    }
} 

答案 4 :(得分: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;
}

答案 5 :(得分:0)

从else子句中删除return statment并在循环结束前移动。因此,如果number是回文,则它落入if子句并返回true,否则返回false。 理论上你的代码是正确的,但编译器不会这样看。