break、continue、label、returnの使い方メモ

#目次
[1.break](#1-break)
[2.continue](#2-continue)
[3.label](#3-label)
[4.return](#4-return)
[5.さいごに](#5-さいごに)

#1. break
直前のループを抜ける。
## 

```java
List<Integer> numberList = new ArrayList<Integer>();
numberList.add(1);
numberList.add(2);
numberList.add(3);

// 拡張for文でnumberListをぐるぐる回す
for (Integer number : numberList) {
  System.out.println(number);

  // numberが2のとき直前のループを抜ける
  if (number == 2) {
    break;
  }
}
```
出力結果は下記の様になる。

```
1
2
```

ループが二重になっている場合はこちら。

```java
List<String> countList = new ArrayList<String>();
countList.add("1周目");
countList.add("2周目");
countList.add("3周目");

List<Integer> numberList = new ArrayList<Integer>();
numberList.add(1);
numberList.add(2);
numberList.add(3);

for (String count : countList) {
  System.out.println(count);

  for (Integer number : numberList) {
    System.out.println(number);

    // numberが2のとき直前のfor文を抜ける
    if (number == 2) {
      break;
    }
  }

  System.out.println("おわり");
}
```
出力結果は下記の様になる。

```
1周目
1
2
おわり
2周目
1
2
おわり
3周目
1
2
おわり
```

#2. continue
continue文以降の処理をスキップし、
次の要素のループ処理へ移る。
## 

```java
List<Integer> numberList = new ArrayList<Integer>();
numberList.add(1);
numberList.add(2);
numberList.add(3);

for (Integer number : numberList) {
  if (number == 2) {
    continue;
  }

  System.out.println(number);
}
```
上記例ではnumberが2のときcontinue以降の出力処理をおこなわず、
numberListの次の要素のループに移る。
出力結果は下記の様になる。

```
1
3
```
ループが二重になっている場合はこちら。

```java
List<String> countList = new ArrayList<String>();
countList.add("1周目おわり");
countList.add("2周目おわり");
countList.add("3周目おわり");

List<Integer> numberList = new ArrayList<Integer>();
numberList.add(1);
numberList.add(2);
numberList.add(3);

for (String count : countList) {

  for (Integer number : numberList) {
    if (number == 2) {
      continue;
    }
    System.out.println(number);
  }

  System.out.println(count);
}
```
上記例ではnumberが2のときnumber出力処理を行わず、
numberListの次の要素のループ処理に移る。
出力結果は下記の様になる。

```
1
3
1周目おわり
1
3
2周目おわり
1
3
3周目おわり
```

[ページ上部へ戻る](#目次)

#3. label
ループが二重以上になっている場合にlabelを付けることによって、
breakやcontinueで抜けるループを指定することができる。

① breakの場合
##

```java
List<String> countList = new ArrayList<String>();
countList.add("1周目");
countList.add("2周目");
countList.add("3周目");

List<Integer> numberList = new ArrayList<Integer>();
numberList.add(1);
numberList.add(2);
numberList.add(3);

// ラベル名をつける
firstLabel:for (String count : countList) {
  System.out.println(count);

  for (Integer number : numberList) {
    System.out.println(number);

    if (number == 2) {
      // ラベルを指定
      break firstLabel;
    }
  }

  System.out.println("おわり");
}
```
breakで抜けることができるのは直前のfor文だが、
labelを使うことによって抜けるfor文を指定することができる。
出力結果は下記の様になる。

```
1周目
1
2
```

② continueの場合
##

```java
List<String> countList = new ArrayList<String>();
countList.add("1周目");
countList.add("2周目");
countList.add("3周目");

List<Integer> numberList = new ArrayList<Integer>();
numberList.add(1);
numberList.add(2);
numberList.add(3);

// ラベル名をつける
firstLabel:for (String count : countList) {
  for (Integer number : numberList) {
    if (number == 2) {
      // ラベルを指定
      continue firstLabel;
    }
    System.out.println(number);
  }
  System.out.println(count);
}
```
labelを使うことによって、指定したlabelが付いたのfor文の、
次の要素のループを行うことができる。

出力結果は下記の様になる。

```
1
1
1
```

[ページ上部へ戻る](#目次)

#4. return
メソッドを抜ける。（呼び出し元に処理を戻す）
##


```java
public static void main(String args[]) {
  List<String> dayList = new ArrayList<String>();
  dayList.add("月曜日");
  dayList.add("水曜日");
  dayList.add("日曜日");

  for (String day : dayList) {
    System.out.println(day);
    // 平日かどうか出力するメソッドの呼び出し
    outputIsWeekDay(day);
}

// 平日かどうか出力するメソッドの呼び出し
private static void outputIsWeekDay(String day) {

  if (day.equals("土曜日") || day.equals("日曜日")) {
    System.out.println("これは平日ではありません");
    return;
  }

  System.out.println("これは平日です");
}
```
checkWeekDayメソッドif文内にreturn文を記載することによって、
「これは平日ではありません」が出力されたあと「これは平日です」が出力されないようになっている。

また、メソッドの最後の } に到達すると処理は呼び出し元に戻るので、
戻り値がないときはメソッド最後のreturn文記載は不要。
（そのため「これは平日です」の出力処理後にreturnを記載していない）

出力結果は下記の様になる。

```
月曜日
これは平日です
水曜日
これは平日です
日曜日
これは平日ではありません
```

[ページ上部へ戻る](#目次)

#5. さいごに
ここまで読んでいただきありがとうございます！
今回は現場で実装を行っていた際に、間違えやすいなと思ったものを個人的にまとめてみました。
自分のアウトプットの内容が誰かのお役に立てると嬉しいです。。