-2
import java.io.*;
import java.util.Scanner;

public class ws1qn2 
{

    public static void main(String[] args) throws IOException
    {
        Scanner input=new Scanner(System.in);
        int a;
        int d;
        System.out.println("Please enter the number of characters the word has: ");
        d=input.nextInt();
        a=d-1;
        char word[]=new char[a];
        for (int b=0;b!=a;b++)
        {
            System.out.println("Please enter character no."+b+1);
            String str;
            str=input.next();
            char c=str.charAt(b);
            word[a-b]=c;
        }
        for (char reverse : word)
        {
            System.out.print(reverse);
        }
    }
}

プログラムを実行すると、次のようになります。

Please enter the number of characters the word has: 
3
Please enter character no.01
s
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
    at ws1qn2.main(ws1qn2.java:22)

Process completed.

ヘルプ?スタック オーバーフローのように見えますが、修正方法がわかりません。

4

2 に答える 2

1

あなたの問題は次のとおりです: word を length の配列に初期化していますがd-1、あなたのケースでは 2 ですが、Java 配列のインデックスは 0 であるため、長さ 2 の配列はインデックス 1 までしか上がりません:

次に、アクセスword[2]して に設定しようとしcています。これにより、配列インデックスが範囲外になります

于 2013-02-03T08:43:32.660 に答える
1

str毎回読み取られ、そのサイズは 1 であると予想されるようです。これを行うべきではありませんchar c=str.charAt(b);が、代わりに常に最初の文字を取得する必要がありますchar c=str.charAt(0);

a-bbがゼロaの場合のもう 1 つの問題は、 sizewords[a-b]の配列の範囲外です。ここでインデックスから 1 を引く必要があります。wordsawords[a-b-1]

于 2013-02-03T08:44:40.710 に答える