1. ホーム
  2. java

スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)

2022-02-14 08:32:45

Java第1章後期演習をやっているときに、以下の問題に遭遇しました。

出題:ユーザーがコマンドラインで入力した24時間制の時刻を12時間制に変換するプログラムを作成しなさい。

私が書いたコードは以下の通りです。

<ブロッククオート

public class One1 { <未定義
    public static void main(String[] args) { { <未定義
        int time = Integer.parseInt(args[0])。     //入力されたコマンドライン引数を整数に変換します。
        if (時間 <= 24 && 時間 > 12) {。 <未定義
            System.out.println("24 時間制 " + time + "12 時間制に変換されたポイントは: " + (time - 12)+"point");
        } else if (time <= 12 && time >= 1) {... <未定義
            System.out.println("24 時間制 " + time + "12 時間制に変換されたポイントは: " + time + "point ")となります。
        } else { <未定義
            System.out.println("Please enter correct time in 24-hour format");
        }
    }
}

この時点で保存して実行すると、次のようなプロンプトが表示されます。

スレッド "main" java.lang.ArrayIndexOutOfBoundsException で例外が発生しました。0 at One1.main(One1.java:3)

調べてみると、コマンドライン入力に引数がなく、int time = Integer.parseInt(args[0]) となっていることが原因であることがわかりました。 文はargs[0]を使用しているので、String型の配列を入力する必要があります。

解決方法 : クラス(この問題で定義したクラスはOne1という名前です)の上で右クリック>Run as>Run configurations を選択し、"Arguments"のセクションを選択して、パラメータのセットを入力し、Run を実行します。

補足 : 今回のコマンドライン経由で取得した引数は文字列型であり、四則演算を行うには、まず数値型に変換する必要があります。IntegerクラスのparseInt()メソッドで括弧内の文字列を整数型に変換し、flaot.parseFloat()、Double.parseDouble()で括弧内の文字列をそれぞれ単精度実数、倍精度実数型に変換してください。

実行時に多くの例でこのようなことが起こることがわかりましたので、少し注意してみてください、この記事があなたの勉強になれば幸いです。