こんにちは 今アレイリストの二次元配列を学習しています
DBからデータを取得で表示したいと思っています
そこでfor文の拡張とつかうとうまくいうのですが
普通に記述するとうまくいきません
拡張FOR 文を使うのは初めてなので 何が違うかアドバイスお願いします
コンパイルできません↓
if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){
ArrayList<ArrayList> hai = new ArrayList<ArrayList>();
ArrayList list = (ArrayList)request.getAttribute("list");
if (list != null) {
hai.add(list);
}
ArrayList list1 = (ArrayList)request.getAttribute("list1");
if (list1 != null) {
hai.add(list1);
}
ArrayList list2 = (ArrayList)request.getAttribute("list2");
if (list2 != null) {
hai.add(list2);
}
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(i));
}
%>
コンパイルOK 表示できています
<%
if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){
ArrayList<ArrayList> hai = new ArrayList<ArrayList>();
ArrayList list = (ArrayList)request.getAttribute("list");
if (list != null) {
hai.add(list);
}
ArrayList list1 = (ArrayList)request.getAttribute("list1");
if (list1 != null) {
hai.add(list1);
}
ArrayList list2 = (ArrayList)request.getAttribute("list2");
if (list2 != null) {
hai.add(list2);
}
for (int i = 0; i < hai.get(0).size(); i++) {
%>
<table border="3">
<tr>
<%
for (ArrayList list4 : hai) {
%>
<td width="60">
<%
out.print(list4.get(i));
}
%>
<br>
</tr>
</table>
<%
上のソースの エラーメッセージ
2013/04/16 9:24:12 org.apache.catalina.core.ApplicationDispatcher invoke
致命的: サーブレット jsp のServlet.service()が例外を投げました
java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
よろしくお願いします
No.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がどんなクラスになるか考えてください。
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 など組み合わせがまずかったんですね・・・
勉強不足でした
何度もありがとうございます
No.3
- 回答日時:
あ、そっか。
ArrayListだからhai[X]→hai.get(X)
でした。
そうなると一番最初にもどってしまいますよね><
やっぱりiterator使って
取得していくしかないですかね??
拡張for文をつかうの楽なのはわかったんですが、拡張for文があまり理解できていないのに、つかっていいのかなぁ・・・と思ったのと、勉強のために
for文で書きたいと思ってるんですが、
No.2
- 回答日時:
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]という風にはつかえないようです。
二次元配列やアレイリストをもっと勉強しなくてはいけませんね><
アドバイスありがとうございます!!
またよければアドバイスください
No.1
- 回答日時:
中途半端な部分が引用されているのでわかりにくいのですが、
上のソースの
for (int k = 0 ; k <= hai.size(); k++) {
……
}
は
for (int k = 0 ; k < hai.size(); k++) {
……
}
なのでは?
バグがある部分をエラーメッセージから推測できるようになると
さらに進歩できると思います。
この回答への補足
返信ありがとうございます。
そちらもためしたのですが エラー内容はかわりませんでした。
拡張for文となにが違うか模索中です・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
Javaで改行などが出来ないのです。
-
1~100までの数字を表示し、か...
-
flush()とclose()について
-
テキストエリアで改行する
-
VBAでEUC-JPのHTMLソースを取得...
-
Log4jで機能毎に別ファイルへ出...
-
system.out.printが出力されない
-
OpenSSL関数エラーについて
-
サーブレット:SQL検索結果に同...
-
ArrayListによる計算表作成
-
System.out.printlnの出力先
-
HTMLタグのエスケープ文字をタ...
-
tomcatのstdout.logを停止したい。
-
ダブルクォーテーション(””)...
-
Tomcatが無応答となる現象が起...
-
PrintWriterとBufferedWriterの...
-
JavaScriptの変数をjavaのメソ...
-
VBSエラー"オブジェクト型の変...
-
Java 九九の表について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
Javaで改行などが出来ないのです。
-
flush()とclose()について
-
System.out.printlnの出力先
-
Log4jで機能毎に別ファイルへ出...
-
1~100までの数字を表示し、か...
-
system.out.printが出力されない
-
1~100までの数字を表示したい
-
StringBufferで改ページ処理を...
-
switch分が機能しません。
-
javaにおけるCSV出力時の文字コ...
-
Eclipseのコンソールを常に表示...
-
Tomcatが無応答となる現象が起...
-
プールとスプールの違いがわか...
-
JavaScriptの変数をjavaのメソ...
-
一定のスペースを空けて端を揃...
-
数字文字列をパック10進数に変...
-
tomcatのstdout.logを停止したい。
-
JAVAのServletで、画像表示につ...
-
System.out.printlnの意味がよ...
おすすめ情報