- int[][]の二次元なのになぜ{1,2,3} {4,5,6} {7,8,9}の3つでエラーが起きないのか
3×3の二次元配列なので何も問題ありません。二次元とは要素が2つという意味ではありませんよ。
- int i =0;; intj=0;;の;;とはどう意味なのか
for文でよく見かける形はfor(int i = 0; i < array.length; i++){}
だと思います。
この括弧の中身は、(前処理;終了条件;変化処理)というような感じです。実際に実行される流れとしては、
前処理→終了条件確認→ループ1回目→変化処理→終了条件確認→ループ2回目→変化処理→終了条件確認→……
となります。ここでint i = 0;; i++
とは、終了条件が空だということです。こうすると無限ループになるので、別途breakでループを終了する必要があります。
breakやcontinueは通常、多重のfor文やwhile文で最も内側のブロックのみから抜け出します。
質問にあるコードなら、最初i = 0, j = 0のときlabelがなければ、continueの次はi = 0, j = 1のループが始まります。
しかしlabelがあることで、continue label;
はlabel:
のついている外側のfor文の次のループを開始します。なので、i = 0, j = 0の次はi = 1, j = 0のループになります。
上に書いたように、i = 0のループではSystem.out.println(ary[i][j]);
が実行される前にcontinue label;
でi = 1になってしまいます。
i = 1, j = 0ではary[i][j]が出力されて、次のi = 1, j = 1のときにまたcontinue label;
でi = 2になります。
i = 2, j = 0のとき、System.out.println(ary[i][j]);
が実行された後、i == 2なのでbreak label;
が実行されます。breakなので、labelのついた外側のfor文が終了されて、mainメソッド全体が終了となります。
以上から、i = 1, j = 0とi = 2, j = 0の2回だけary[i][j]が出力されるので、結果4と7が表示されます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。