0

文字列引数の配列をメインからメソッドに渡そうとしていintegerCheckます。メインへの入力の長さが 3 文字列を超えることはありません。コードは正常にコンパイルされますが、3 つの文字列の入力を入力しようとすると、次のエラーが発生します。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

これはどこから来たのですか?

private static void integerCheck(String[] b)
{
    int i;
    for(i=0;i<4;i++)
    { 
        try {Integer.parseInt(b[i]);}
        catch (NumberFormatException e)
        { 
        System.err.println("one of inputs not an int");
        System.exit(1);
        }
    }
}

public static void main(String[] args)
{

    integerCheck(args);
}
4

5 に答える 5

1

次のようにする必要があります(プログラムに要素をfor(i=0;i<3;i++)渡す場合は で動作するはずですが、入力のみが必要な場合は である必要があります)。4433

なんで?

for(i=0;i<4;i++)で実行されているためです0 1 2 3。したがって、期待される入力の長さは実際には4です。に到達しようとしていますがb[3]、これはjava.lang.ArrayIndexOutOfBoundsExceptionです。

: デバッガーは大いに役立ちます..それを使用すると、問題をよりよく理解できます!

于 2013-02-09T12:23:49.657 に答える
0

非常に単純な間違い。配列に 3 つの要素がある場合、それらのインデックスは 0、1、2 です。ループは 0 から 4 未満になります。これは、要素 0、1、2、3 にアクセスしようとしたことを意味します。要素 3 は存在しません。引数を 3 つだけ与えました。別の考え方としては、要素番号 3 が配列の 4 番目の要素であるということです (要素の番号は 0 から始まるため)。

于 2013-02-09T12:23:41.700 に答える
0

よりfor(i=0;i<4;i++)多くの要素がありますstring[b]

これを試して交換してください

 for(i=0;i<4;i++)

 for(i=0;i<b.length;i++)
于 2013-02-09T12:23:53.303 に答える
0

これを試してみてください

 private static void integerCheck(String[] b)
    {
        int i;
        for(i=0;i<3;i++)
        { 
            try {Integer.parseInt(b[i]);}
            catch (NumberFormatException e)
            { 
            System.err.println("one of inputs not an int");
            System.exit(1);
            }
        }
    }

public static void main(String[] args)
{
     if(args.length==3)
    {
    integerCheck(args);
    }
}
于 2013-02-09T12:40:34.933 に答える
0

記述したコードに構文エラーがないため、コードは正常にコンパイルされています。java.lang.ArrayIndexOutOfBoundsException は、配列のサイズを超えるインデックスにアクセスしようとしたときに発生する実行時例外です。

現在の状況では、メイン メソッドの呼び出し中に 4 つ未満の引数を渡すと、常にこれに直面します。Java のインデックスは 0 ベースなので、 0 1 2 と 3 があることを思い出してください。

あなたが言ったように、uはそれぞれ0 1と2にある3つの引数を渡しているので、4番目の値を渡すか、条件をfor(i=0;i<2;i++)に変更してください。

于 2013-02-09T12:46:12.827 に答える