1

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;
            }
        }
    }
} 
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にはループの後に配置する必要があります。そうしないと、常に1回実行されます。

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 に答える