- ベストアンサー
二次元配列の学習と拡張FOR文の使い方について
- アレイリストの二次元配列を学習していますが、普通の記述ではうまくいきません。拡張FOR文の使い方の違いを教えてください。
- コンパイルエラーが発生しています。エラーメッセージは「java.lang.IndexOutOfBoundsException: Index: 2, Size: 2」となっています。
- 画面表示が正しくされていないようです。出力結果を正しく表示する方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
同じにはなりません。 #2を訂正して書きます for (ArrayList list4 : hai) { だと list4=hai.get(0) list4=hai.get(1) list4=hai.get(2) ... list4=hai.get(k) ... list4=hai.get(hai.size()-1) というループになります。 out.print(list4.get(i)); は out.print(hai.get(0).get(i)); out.print(hai.get(1).get(i)); out.print(hai.get(2).get(i)); ... out.print(hai.get(k).get(i)); ... out.print(hai.get(hai.size()-1).get(i)); になります。 for (int k = 0 ; k < hai.size(); k++) { out.print(hai.get(i)); } との違い、わかりますね? a=hai.get(i) としたときに、aがどんなクラスになるか考えてください。
その他の回答 (3)
- kmee
- ベストアンサー率55% (1857/3366)
あ、そっか。ArrayListだから hai[X]→hai.get(X) でした。
お礼
そうなると一番最初にもどってしまいますよね>< やっぱりiterator使って 取得していくしかないですかね?? 拡張for文をつかうの楽なのはわかったんですが、拡張for文があまり理解できていないのに、つかっていいのかなぁ・・・と思ったのと、勉強のために for文で書きたいと思ってるんですが、
- kmee
- ベストアンサー率55% (1857/3366)
k<=とk<をなおした上で。 「二つのプログラムが、同じ内容ではないから」 for (ArrayList list4 : hai) { だと list4=hai[0] list4=hai[1] list4=hai[2] ... list4=hai[k] ... list4=hai[hai.size()-1] というループになります。 out.print(list4.get(i)); は out.print(hai[0].get(i)); out.print(hai[1].get(i)); out.print(hai[2].get(i)); ... out.print(hai[k].get(i)); ... out.print(hai[hai.size()-1].get(i)); になります。 for (int k = 0 ; k < hai.size(); k++) { out.print(hai.get(i)); } との違い、わかりますね?
お礼
ありがとうございます 勉強になりました。 よんでから作成してみました for (int i = 0; i < hai.get(0).size(); i++) { for (int k = 0 ; k < hai.size(); k++) { out.print(hai[k].get(i)); } という風にしてみたのですが・・・ エラーがでます・・・ kの値は0~sizeー1 という風にしているのですが コンパイルエラーがでます hai[k]という風にはつかえないようです。 二次元配列やアレイリストをもっと勉強しなくてはいけませんね>< アドバイスありがとうございます!! またよければアドバイスください
- Picosoft
- ベストアンサー率70% (274/391)
中途半端な部分が引用されているのでわかりにくいのですが、 上のソースの for (int k = 0 ; k <= hai.size(); k++) { …… } は for (int k = 0 ; k < hai.size(); k++) { …… } なのでは? バグがある部分をエラーメッセージから推測できるようになると さらに進歩できると思います。
補足
返信ありがとうございます。 そちらもためしたのですが エラー内容はかわりませんでした。 拡張for文となにが違うか模索中です・・・
お礼
for (int i = 0; i < hai.get(0).size(); i++) { %> <table border="3"> <tr> <% for (int k = 0 ; k < hai.size(); k++) { %> <td width="60"> <% out.print(hai.get(k).get(i)); } %> <br> という風にするとコンパイルでき表示することができました。 ()と[] get など組み合わせがまずかったんですね・・・ 勉強不足でした 何度もありがとうございます