見出し画像

JavaSilverに向けて⑤ 繰り返し構文

・while


条件式は必ず真偽値を返すようにしなければならない。

・do-while


while文との違いは、繰り返し処理が行われてから判定が行われる。そのため、必ず1度は繰り返し処理が行われる。
また、必ずセミコロンで終了する。
do {
} while(条件式);

・for


3つの式が必要。for文のポイントは以下の点である。
  ー それぞれの文(最後の更新文以外)がセミコロンで区切られている。
  ー 最後の更新文は、繰り返し処理が終わってから一時変数の値を変更する。
  ー 初期化文、更新文を複数指定する際は、カンマで区切る必要がある。
  ー 条件文を複数指定する際は、論理演算子を使って書く。
  ー 初期化文で複数の変数を宣言する際は、変数は同じ型にしなければならない。int型とbyte型みたいなのはNG。
for (初期化文; 条件文; 更新文) {
    繰り返し処理
}
*ちなみに、更新文を論理演算子を使わずに、カンマで区切って指定するとコンパイルエラーとなる。

・for文の動作順


for(int i = 0; i < 5; i++, sample()) {処理内容}
上記のfor文の場合の処理順
①変数iが宣言され、0で初期化される。
②条件文(i < 5)が判定される。
③処理内容が実行される。
④変数iがインクリメントされる。
⑤sample()が実行される。
⑥②に戻る。

・二重ループ


for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
        System.out.println("i = " + i + ", j = " + j);
    }
}
上記の場合であれば、外側が1回まわるたびに内側が2回まわる。
上記の場合、以下のような挙動となる。
  ー iが初期化され、0で繰り返しが始まる。
  ー jが初期化され、0で繰り返しが始まる。
*i = 0, j = 0を出力。
  ー 更新文により、jが1加算される。
*i = 0, j = 1を出力。
  ー jが加算され2となり、内側のfor文が終了する。
  ー iが加算されi = 1となり、繰り返しが始まる。
  ー jが初期化され、j = 0となる。
*i = 1, j = 0を出力。
  ー jが加算されj = 1となる。
*i = 1, j = 1を出力する。
  ー jが加算されj = 2となり、内側の繰り返し文が終了する。
  ー iが加算されi = 2となり、外側のfor文の繰り返しが終了する。

つまり、上記のコードを実行した際に表示されるのは以下である。
「i = 0, j = 0」「i = 0, j = 1」「i = 1, j = 0」「i = 1, j = 1」

・拡張for文


for (型 変数名 : 配列など) {
    繰り返し処理
}
配列などの部分から要素への参照をコピーして、この一時変数に代入する。

・break


whileやfor文などの繰り返し処理を実行している最中に中断したい時は、breakを使う。
2重ループの内側でbreakを使うと、内側の条件とあった際に外側に抜ける。つまり、直近のループだけを中断する。

・continue


continueは繰り返しの処理をスキップして、次の繰り返し処理に移行する。
breakと同じように、直近のループ処理だけに作用する。
for (int i = 0; i < 5; i++) {
    if (i == 2 ) {
        continue;
    }
    System.out.println(i);
}
//0134
という結果となる。

・多重ループとラベル付きcontinue

ラベル: for (条件式) {
    for (条件式) {
        処理
        continue ラベル;
    }
}
*サンプル
public class Main {
    public static void main(String[] args) {
        String[] str1 = {"a", "b", "c", "d"};
        String[] str2 = {"e", "f", "g", "h"};
        loop: for(int i = 0; i < str1.length; i++) {
            for(int j = 0; j < str2.length; j++) {
                if (i > 2 || j >2) {
                    continue loop;
                }
                System.out.println(str1[i] + "," + str2[j]);
            }
        }
    }
}
//結果
a,e
a,f
a,g
b,e
b,f
b,g
c,e
c,f
c,g

上記のコードを実行すると、ご覧のように最初の3文字ずつ繰り返される。ラベルを使うと、内側の処理だけではなく、一度に外側の処理も抜ける。
ラベルは、for文以外にも使う事ができる。if文や代入式にも利用できる。

・for文の実行順序
1、変数が初期化される。
2、条件文が判定される。
3、コンソールに変数が表示される。
4、変数がインクリメントされる。
5、メソッドとかがあればメソッドが呼び出される。
6、2に戻る。


この記事が気に入ったらサポートをしてみませんか?