0

ユーザーが入力した文字列が回文かどうかを識別するための CS クラスのコードを作成しました。コードが動作するようになりました。ただし、コードを実行するたびに、次のメッセージが表示されます。

"Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.charAt(String.java:658)
    at palindrome.Palindrome.main(Palindrome.java:14)"

lengthと何か問題があると思いますが、i何が原因かわかりません。私のコードは以下です。aabbaaユーザー入力文字列に使用しました。

package palindrome;

import java.util.Scanner;

public class Palindrome {

    public static void main(String[] args) {
        System.out.println ("Enter A String:");
        Scanner input = new Scanner (System.in);
        String s = input.nextLine();
        int length = s.length();
        int i = 0;
        while (length>= 0) {
            if (s.charAt(i) == s.charAt(length-1)) { 
                i++;
                length--;
                if (length == i) {
                    System.out.println ("Your string is a palindrome");
                    length = 0;
                }
            }
            else {
                System.out.println ("Your string is not a palindrome");
                length = 0;
            }
        }
    }
}
4

6 に答える 6

2

length が 0 の場合、while ループの最初の if ステートメントは s.charAt(0-1)、iescharAt(-1) を取得しようとしますが、ここでエラーが発生します。

おそらく次のことを試してください(テストされていません):

public static void main(String[] args) {
System.out.println ("Enter A String:");
Scanner input = new Scanner (System.in);
String s = input.nextLine();
int length = s.length();
int i = 0;
while (length > 0) {
    if (s.charAt(i) == s.charAt(length-1)) { 
        i++;
        length--;
        if (length < 1) {
            System.out.println ("Your string is a palindrome");
            break;
        }
    }
    else {
        System.out.println ("Your string is not a palindrome");
        break;
    }
}
于 2013-02-13T02:28:07.933 に答える
0

次のようなことを行う必要があります。

package palindrome;

import java.util.Scanner;

public class Palindrome {

    public static void main(String[] args) {
        System.out.println ("Enter A String:");
        Scanner input = new Scanner (System.in);
        String s = input.nextLine();
        if ( s.equals(new StringBuffer(s).reverse().toString()) ){
            System.out.println ("Your string is a palindrome");
        else
            System.out.println ("Your string is not a palindrome");
    }
}
于 2014-04-29T11:24:41.973 に答える
0

その時点でwhileループを繰り返すと、長さの値が負になり、配列インデックスがそれから始まり0、例外がStringIndexOutOfBoundsException.

これを試してみてください。問題なく動作します。

import java.util.Scanner;

public class Palindrome
{
    public static void main(String[] args)
    {
        System.out.println("Enter A String:");
        Scanner input = new Scanner(System.in);
        String s = input.nextLine();
        int length = s.length();
        int i = 0;
        while (length >= 0)
        {
            if (s.charAt(i) == s.charAt(length - 1))
            {
                i++;
                length--;
                if (length-1 == i)
                {
                    System.out.println("Your string is a palindrome");
                    length = 0;
                    break;
                }
            }
            else
            {
                System.out.println("Your string is not a palindrome");
                length = 0;
                break;
            }
        }
    }
}
于 2014-04-29T10:54:45.270 に答える
0

あなたの問題は、すべてのステップで2つのストライドを取り、長さを1だけ減らすことです

したがって、トレース: ユーザーが入力しfoooofます。

length = 6
i = 0
f == f
i = 1
length = 5
o == o
i = 2
length = 4
o == o
i = 3
length = 3 (You've now passed yourself)
o == o
i = 4
length = 2
length-i = -2 =>     index out of range
于 2013-02-13T02:27:31.603 に答える