【ループ構造の使用】while文、do-while文、for文、拡張for文

## はじめに
オラクル認定資格教科書 Javaプログラマ Silver SE８
第一章　Javaの基本　
第二章　Javaのデータ型の操作
第三章　演算子と判定構造の使用
第四章　配列の作成と使用
第五章　ループ構造の使用←　ｲﾏｺｺ！！
第六章　メソッドとカプセル化の操作
第七章　継承の操作
第八章　例外の処理
第九章　Java APIの主要なクラスの操作

## ループ処理について
javaでは以下のような４つのループ構文がある
・while文
・do-while文
・for文
・拡張for文

## while文
while文は、条件式がtrueを戻す間、処理を繰り返す
while文の繰り返し条件として記述できる式は１つだけである

```java
int a = 10;
int b = 0;
while(a < 5) { // aが10,9,8,7,6の時に実行される
  System.out.println(b);
  a--;
  b++;
}
// 結果: 0 1 2 3 4
```

if文と同様に、「{}」を省略して書くことが可能（使わないけど・・・）
省略した場合は、条件式の次の一文のみ繰り返しの対象となる

```java
int a = 0;
while(a++ < 5) // aが0,1,2,3,4の時に実行される
  System.out.println("A");
  System.out.println("B");
// 結果: A A A A A B（Aのみが繰り返し対象）
```

## do-while文
do-while文は条件式の前に繰り返し処理をdoで記述する
そのため、条件の真偽に関わらず必ず一度は実行される

```java
do {
  // 繰り返し処理
} while (条件式); //最後はセミコロン「;」で終わる
----------------------------------------
中カッコ省略
　do
  　//記述できる繰り返し処理は１つだけ　（２つ以上書くコンパイルエラー）
　while (条件式);
```

## for文
for文は初期化文、条件文、更新文の３つからなる
記述する際はセミコロン「;」でそれぞれを区切る
また、条件式と更新文は省略ができるが、無限ループとなる可能性があるので要注意

```java
for (初期化文; 条件文; 更新文) { // 実行の順番は【初期化文→条件化文→繰り返し処理→更新文...】
  // 繰り返し処理
}
----------------------------------------
使用例
for (int i = 0; i < 3; i++) {
  System.out.println(i);
}
// 結果: 0 1 2
```

初期化文と更新文は複数記述できる
複数記述する際は、カンマ「,」で区切る。また、初期化文は同じ型でなければならない
```java
for (int i = 0, j = 0; i < 3 && j < 3; i++, j++) {
  System.out.println(i + j);
}
// 結果: 0 2 4
```
なお、for文内(中カッコ「{}」内)で宣言した変数は、for文のブロック内でのみ有効

## 拡張for文
```java
構文
for (型 変数名 : 集合) {
  // 繰り返し処理
}
-------------------------------------
使用例
int[] array = {1, 2, 3, 4, 5};
for (int a : array) {
  System.out.println(a);
}
// 結果： 1 2 3 4 5
```

## 繰り返し処理の制御
### breakを使った繰り返し処理の中断

```java
int num = 0;
while (num < 4) {
  if (num == 3) {
    break; // numが3になったら繰り返しから抜ける
  }
　　　　System.out.println(num);
  num++;
}
// 結果: 0 1 2
```

多重ループでbreakした際は、直近のループのみ抜けて、外側のループは継続される

### continueを使った繰り返し処理のスキップ
continueはループ処理から抜けるのではなく、continue以降の繰り返し処理をスキップして、次回のループが実行される

```java
for (int i = 0; i < 5; i++) {
　  if (i == 3) {
    continue; // numが3の時だけ以下の処理が更新式までスキップされる
  }
　　　　System.out.println(num);
}
// 結果: 0 1 2 4
```

### ラベルを使ってbreakとcontinue時に制御を移す箇所を指定
以下の例では、通常、２重ループの内側のループでbreakした際には、内側のループからのみ抜けて。外側からは抜けないが、ラベルを利用することで外側まで抜けることができる

```java
samle : //ラベルを一番外に置くことで、breakでここまで抜ける
for (int i = 0; i < 10; i++) {
  for (int j = 0; j < 10; j++) {
    if (3 < j) {
      break sample;
    }
    System.out.println("j:" + j);
  }
  System.out.println(i);
}
// 結果: j:0 j:1 j:2
```

## リンク集
[【Javaの基本①】クラスの構造](https://qiita.com/vitamin_b12/items/3f920cd223fd3cc1ceae)
[【Javaの基本②】パッケージとインポート](https://qiita.com/vitamin_b12/items/be766c8c3ef2366d9fea)
[【継承の操作②】インターフェース](https://qiita.com/vitamin_b12/items/cdc76298d7f6a494dff2)
[【Javaのデータ型の操作①】プリミティブ型のデータ・参照型](https://qiita.com/vitamin_b12/items/f922ab56e4d8b6580f49)
[【演算子と判定構造の使用①】論理演算子(&&、||)、同一性（==）、同値性(equals)](https://qiita.com/vitamin_b12/items/9feb89e8fb1bc67a8d6d)
[【演算子と判定構造の使用②】分岐処理(if、swich)](https://qiita.com/vitamin_b12/items/523467908e683474eac7)
[【配列の作成と使用】](https://qiita.com/vitamin_b12/items/2fc45588640c479e1f4d)
[【ループ構造の使用】while文、do-while文、for文、拡張for文](https://qiita.com/vitamin_b12/items/23d853dda9baf727e4ac)
[【メソッドとカプセル化の操作①】メソッドの概要](https://qiita.com/vitamin_b12/items/215ad731221c2691c441)
[【メソッドとカプセル化の操作②】オーバーロード、コンストラクタ](https://qiita.com/vitamin_b12/items/e4fd3d51a35bb6a5566c)
[【継承の操作①】クラスの継承](https://qiita.com/vitamin_b12/items/19f8ad6f9801ac8f6a8f)
[【例外の処理】](https://qiita.com/vitamin_b12/items/f7ebf2c1106a7dcbdb41)
[【Java APIの主要なクラスの操作】](https://qiita.com/vitamin_b12/items/dcd3edfe2273e5a09231)