1

charAt の部分は理解していますが、他の部分で問題が発生しています。このコードの残りの部分を順を追って説明していただければ、より明確に理解できます。ありがとう

public static boolean y(String str) {
    int i = 0;
    int j = str.length()-1;
    while (i != j && (j - i) != 1) {
        if (str.charAt(i) != str.charAt(j)) 
        {
            return false;
        }
        i++;
        j--;
    }
    return true;
}

opps エラーが発生しました while ステートメントは次のようになります >> while (i != j && (j - 1) ! = 1)

4

2 に答える 2

5

strコードは、回文であるかどうかを判断します。

i文字列の最初から中央までの各文字を表します。 j文字列の最後から中央までの各文字を表します。

i値を0(最初の文字)に設定して 初期化します。j文字列の長さから1(最後の文字)を引いた長さになるように初期化されます。

次に、コードがループし、で表される文字ij一致するまで、または比較する文字がなくなるまで比較します。

たとえば、回文「レーダー」が与えられた場合、コードは次のように比較できます。

  • rとr

その後、終了します。奇数の長さの回文では、明らかに真ん中の文字を比較する必要はありません。したがって、ステートメント 内にありi != jます。while

偶数の長さのパリンドロームを処理するときに、コードに問題があります。 クロスオーバーしますが、同じになることはありませんij2番目の句、(j - i) != 1はこれを修正するように設計されているように見えますが、比較が早すぎます。

回文「プルアップ」iが2でj3の場合(つまり両方のL)、比較せずにループを終了します。これは、falseを返す必要があるときに、非パリンドロームの偶数の単語がtrueを返すことを意味します。

where句全体を次のように変更した場合:

where (j - i > 0)

コードはすべての場合に機能します。

于 2012-10-01T07:38:13.360 に答える
1

文字列の先頭(位置i)と文字列の末尾(位置j)を比較し、文字列の中央に到達するまで次の文字のペア(i + 1、j --1)に移動します。文字列が回文の場合。

于 2012-10-01T07:38:09.303 に答える