![見出し画像](https://assets.st-note.com/production/uploads/images/41725299/rectangle_large_type_2_360a35d3e044dbc1bedacc593792343e.png?width=1200)
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に戻る。