--->Main163_2.java
このforの条件文が理解できないといけない。
i(行)に関しては
i<scores.length
で済む。長さは「何階建てか」で戻ってくる。
問題はjをどう条件づけるか?
iが自動的に0-2階まで変化するので、そのフロアごとの部屋数、
j < scores[i].length;
で長さが分かる ←これ後で聞いて解決すること
↓
分かった気がする。
内側のforは、iが入った状態でくるくるしているから、
内側に入った時点で配列が一時配列になっている。
その配列の長さは、現在のiに相当する、
scores[i].length;
だからそれでいいのではないだろうか。
--->Main163_2.java
package part1;
public class Main163_2 {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
int[][] scores =
{ {10,20},//1行目
{30,40,50},//2行目
{60,70,80,90}//3行目
};
for (int i=0; i<scores.length; i++) {//行を表す
for(int j=0; j < scores[i].length; j++) {//列を表す
System.out.println("ただいまiは"+i);
System.out.println("ただいまjは"+j);
System.out.println(scores[i][j]);
}
}
//System.out.println(scores.length);
//System.out.println(scores[0].length);
}
}
コードの左側の青い帯の部分をダブルクリックすると
そこにブレークポイントが撃ち込まれる
実行→デバック
ブレークポイントまで進む
f6押したら一行ずつ進む
f5を押すとメソッド本体を掘っていく
f7で元に戻る
もしウィンドウがおかしくなったら、
ウィンドウ→パークスぺくてぃぶ→パークスペクティブのリセット
で戻るよ
--->Main163_3.java
拡張forで二次元配列の内容を出力する
package part1;
public class Main163_3 {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
int[][] scores =
{ {10,20},//1行目
{30,40,50},//2行目
{60,70,80,90}//3行目
};
for (int[] value : scores) {
for(int value2:value) {
System.out.println(value2);
}
}
}
}
おわかりかな?
外側のforでは、valueのテーブルに「配列scoresの内容いっこ置いてくださいよ」といったとき、「ほいよ」と置かれたのが「1次元配列のかたまり」なのだ。
外側forの1回目で、valueに何が置かれたかというと、
{10,20}がかたまりでどんとおかれてる
→内側のforでは、1次元配列の中身をいっこずつvalueのテーブルにおいてほしい。
よって、
外側のforではvalueのテーブルに「1次元配列」がどんとおかれるがゆえに、
テーブルのvalue側も「int[] value」という一次元配列の入れ物で用意していないと型が合わないのだ
さらに、
内側のforでは、value2のテーブルの上に置かれるのは、「そのvalueの中身いっこおいてくださいよ」だから、配列でなくて単体数値でよいのでint value2というテーブルで済むことになる。