-2

以下のコードを実行すると、次のメッセージが表示されました。それはどういう意味ですか? この場合、どうすればそれを克服できますか?

スレッド「メイン」での例外 java.lang.ArrayIndexOutOfBoundsException: 0 at ifDemo.main(ifDemo.java:5)

public class ifDemo {
public static void main (String [] args)

{
    int x= Integer.parseInt(args[0]);
    double half=0.0;
    if (x!=0)
    {
        half=x/2.0;
        System.out.println(x+ "/2 = "+half);
    }
    if (x==0)
    {
        System.out.println("The value of x is "+x);
    }
    int y=x*5;
    char grade='F';
    if(y>=85)
    {
        grade='A';
    }
    if (y>=70 && y<85)
        grade='C';
    System.out.println("y=  "+y+ "and grade equal to  "+grade);

    }
}
4

8 に答える 8

3

基本的にこれは、存在しない args 配列のインデックスにアクセスしようとしていることを意味します。

コードには次のものがあります。

int x= Integer.parseInt(args[0]);

そして、このエラーは、実際には args 配列にインデックス 0 がない、つまり配列が空であることを訴えています。

これを解決するには、実行時にプログラムのコマンドライン引数を渡す必要があります。つまり、java ifDemo Some Integer Hereとして実行します。

さらに読むには、これを試してください。また、Googleはあなたの友達です

于 2013-04-21T06:54:01.100 に答える
2

xコードの実行中に、arg[0] から値を取得できる値を渡さない場合があります。

コードの実行中に値を渡すと、問題が解決します。

それを実行するためにコマンドラインを使用していますか?

于 2013-04-21T06:54:19.200 に答える
2

コマンドラインからプログラムを実行している場合、次のように引数を追加するのを忘れています。

java ifDemo.class 1

したがって、基本的に変数argsには何も含まれていません。したがって、値を取得しようとすると、args[0]がスローされArrayIndexOutOfBoundsExceptionます。詳細については、こちらをご覧ください。

追加できるのは、ユーザーが番号を入力したかどうかを確認し、入力していない場合は通知する形式の検証です。そのためのコードは次のようになります。

if(args == null || args.length == 0) {
    System.out.println("Please enter a number as a command line argument.");
    System.exit(0);
}

または、コンソールから入力を取得し、それを検証するためにdo while ループを使用することを検討することもできます。コード例が必要な場合は、お知らせください。

于 2013-04-21T06:54:34.573 に答える
2

コマンド プロンプトでプログラムを実行しようとしている場合は、必ずコマンド ライン引数を指定してください。プログラムを実行してみましたが、エラーは発生しませんでした。

スクリーンショット

于 2013-04-21T06:55:24.890 に答える
1
int x= Integer.parseInt(args[0]);

上記の行では、少なくとも 1 つの要素があると仮定して、配列にインデックスを付けています。その中に1つの要素が含まれていますか?Java プログラムを呼び出して番号を渡していますか?

于 2013-04-21T06:54:28.820 に答える
1

int x= Integer.parseInt(args[0]);

これは、最初のコマンド ライン引数を読み取ろうとしています。何もない場合、説明した例外で失敗します。

コマンド ライン引数をチェックしてプログラムを更新し、間違っている場合はエラー メッセージを追加する必要があります。

于 2013-04-21T06:54:39.530 に答える
1

は整数として実行しますjava ifDemo xxxxxx

argsコマンドライン引数と呼ばれる文字列の配列です。したがって、コマンド ラインから としてプログラムを実行するとjava ifDemo 10 12、args には が含まれ[10,12]args[0]10 にargs[1]なり、12 にargs.lengthなり、2 になります。

コマンドライン引数を指定してプログラムを実行しなかったため、この行はエラーをスローしています。

int x= Integer.parseInt(args[0]);

argsが空で、配列の最初の要素にアクセスしようとすると、配列が不正なインデックスでアクセスされたことを示すためにスローされ、 ArrayIndexOutOfBoundsExceptionが発生します。インデックスが負であるか、配列のサイズ以上です。

于 2013-04-21T06:55:21.080 に答える
1

コマンドライン引数として整数を渡していませんint x= Integer.parseInt(args[0]);

args[0] には、コマンド ライン引数によって値が割り当てられます。

次の方法でプログラムをコンパイルして実行します。

javac ifDemo.java

java ifDemo 23

プログラムを実行すると、args[0] は 23 です。

以前はコマンドラインで引数を指定していなかったため、 args[0] が設定されておらず、array-outofbound-exception が発生していました。

于 2013-04-21T06:56:39.347 に答える