-2

何か足りないものがないか知りたいです。「レースカー」と入力する場合は回文を表示する必要があり、「いんげん」を入力する場合は回文ではなく表示する必要がありますが、コードを実行するとエラーが発生します。

スレッド「メイン」での例外 java.lang.StringIndexOutOfBoundsException: 範囲外の文字列インデックス: java.lang.String.charAt(String.java:686) で 3 が praktis.Palindrome.main(Palindrome.java:11) で

     public static void main (String args[]) {
        String word = JOptionPane.showInputDialog("Enter a String:");
        String finalword = word.replaceAll(" ","").toLowerCase();

        for (int x = word.length(); x >= word.length()-1; x--) {
        //this is my line 11 // 
                 finalword.charAt(x);
       }
            if(word.equals(finalword)) {
                JOptionPane.showMessageDialog(null, "Palindrome");
            }
            else {
                JOptionPane.showMessageDialog(null, "Not a Palindrome");
            }
    }
4

4 に答える 4

3

for (x = word.length()-1; x >= 0; x--)

編集:

String word = JOptionPane.showInputDialog("Enter a String:");
        String finalword = "";
        int x;
        for (x = word.length()-1; x >= 0; x--) {
            finalword = finalword + word.charAt(x);
        }
        if (word.equals(finalword)) {
            JOptionPane.showMessageDialog(null, "Palindrome");
        } else {
            JOptionPane.showMessageDialog(null, "Not a Palindrome");
    }

于 2012-12-17T01:49:45.063 に答える
2

長さでインデックスを作成しているため、問題が発生します。ゼロから長さマイナス 1 までのインデックスを作成する必要があります。

for (x = word.length()-1; x >= 0 ; x--)
    ....

さらに、呼び出しcharAt(x)によって文字列が変更されることはありません (実際、文字列に対して呼び出すメソッドは文字列を変更できません。Java の文字列は不変です)。StringBuilder単語を逆に構成する場合は、元の単語を逆に反復するときに を使用し、文字を追加することを検討してください。

于 2012-12-17T01:49:25.703 に答える
1

スペースが置き換えられるため、文字の長さが異なる場合にword.length()文字にアクセスするために使用しています。また、 aは配列とまったく同じように0 から- までのインデックスが付けられるため、 at でのインデックス付けは範囲外です。finalwordfinalwordStringlength - 1length()

于 2012-12-17T01:53:29.483 に答える
0

charAt() のインデックスは 0 であるため、charAt(word.length()) は文字列の末尾の 1 文字後になります。x を word.length()-1 から開始するだけです。それが役立つことを願っています!

于 2012-12-17T01:48:43.667 に答える