- ベストアンサー
Javaでエラーが出る問題の指摘
- Javaでプログラムを作っている途中でArrayIndexOutOfBoundsExceptionというエラーが発生します。このエラーは配列として確保された領域を超えた場所にアクセスしたときに発生します。
- 問題のプログラムは、ファイルからデータを読み込み、配列に格納する処理です。しかし、どこが間違っているのか見つけることができません。
- 開発環境はJava7です。問題のプログラムは、指定されたテキストファイルからデータを読み込み、二次元配列に格納する処理です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 >もしかしたら改行の関係で多少のずれがあるかもしれないので念のため記載しておきます。 #1でも書きましたが、エラーメッセージ情報は問題解決する上で、 ■■■ 非常に重要な情報 ■■■ です。 ずれたのであれば、きちんとした正しい情報を元にデバッグ作業を開始してください。 (普通はそうします) 今回は「ずれていない」という前提で進めます。 java.lang.ArrayIndexOutOfBoundsException: 12 at Datain.datain(Datain.java:23) at Datain.main(Datain.java:38) これの意味は、 Datain.javaファイルの38行目(Datainクラスのmainメソッド)から呼び出された、 Datain.javaファイルの23行目(Datainクラスのdatainメソッド) で、java.lang.ArrayIndexOutOfBoundsExceptionが発生したことを表示しています。 つまり最終的には、「Datain.javaファイルの38行目」がエラーの場所です。 補足に書かれたとおりだと、 mondata[i][z] = indata_2[z]; ということですので、 原因は、 ・mondata[i][z] のi ・mondata[i][z] のz; ・indata_2[z] のz のどれかです。 そこで、mondata[i][z] = indata_2[z];の前の行に、 System.out.println("デバッグ用情報 i=" + i + ",z=" + z); という1行を挿入し、コンパイル後実行してください。 最後に表示されたこのメッセージの時にエラーとなります。 その情報と、配列の定義情報を見比べれば、直接のエラー原因が解明できるはずです。
その他の回答 (3)
- hitomura
- ベストアンサー率48% (325/664)
mondata[i][z] = indata_2[z]; のところでiとzの値がどうなっているか確認しましたか? その行で"配列として確保された領域を 超えた場所アクセスした場合に発生"する例外が発生したというのであれば、直接の問題はそこです。
お礼
みなさんに言われたとおりにデバックを繰り返した結果,問題は配列が小さかったためとZに原因があることが判明しました。 ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
本題とは関係ないけど String[] indata_2 = new String[12]; における初期化ってなんのため?
補足
その配列を使う部分でエラーが起きていたのでもしかしたらと思い,初期化処理を付け足してみました・・・。 なので特にプログラムを動かすうえでは意味はありません。 紛らわしくてすみません・・・。
- ngsvx
- ベストアンサー率49% (157/315)
そのメッセージと一緒に、そのエラーがどのファイルの何行目で発生したかが表示されているはずです。 それをよく読めば解決できると思います。 というか、上級者もその情報をたよりに問題を解決します。 もし、見方がわからないということなら、メッセージを省略せず、全部記載してください。
補足
すみませんでした。 エラーメッセージを表示します。 java.lang.ArrayIndexOutOfBoundsException: 12 at Datain.datain(Datain.java:23) at Datain.main(Datain.java:38) と出ています。 ちなみに 23行目はこれです。…mondata[i][z] = indata_2[z]; 38行目はこれです。…a = datain(); もしかしたら改行の関係で多少のずれがあるかもしれないので念のため記載しておきます。 よろしくお願いします。
お礼
恥ずかしながら直接的な原因はデータにあったようです。 思いもよらぬところに","があり配列が知らぬ間に大きくなっていたようです。 なのでデバックの結果は,配列が小さかったためエラーが起きたので,zに原因があったようです。 本当にありがとうございました。