---
# System prepended metadata

title: 'Java 學習筆記 - 2-1: 迴圈'
tags: [Java 學習筆記]

---

###### tags: `Java 學習筆記`
# Java 學習筆記 - 2-1: 迴圈
## while 迴圈
```java=
public class ConterControlled {
    public static void main(String[] args) {
        int counter = 1;
        while (counter <= 10) {
            System.out.println(counter);
            ++counter;
        }
    }
}
```
* 第三行: 控制變數的名稱 counter, 且初始化為 1
* 第四行: 迴圈執行的條件 - 檢測 counter 中的數值
* 第九行: 將 counter 遞增
* 程式或是 app 會跑，就是在一個無限迴圈之中
* 只能在 while 迴圈外做初始化，相關變數的空間無法釋出

## for 迴圈
```java=
public class ConterControlled {
    public static void main(String[] args) {
        int sum = 0;
        int i;
        for (i =1; i < 11; i++) {
            sum += i;
        }
    }
}
```
* for 迴圈要有兩個分號，可以區別三個地方，這邊的分號沒有換行的意思
    * 第一個區塊是初始化: 第一次進入 for 迴圈，只做一次
    * 第二個區塊是判斷: 每一圈開始之前會做的判斷
    * 第三個是改變: 每一圈結束之後的改變，可以想成最後加上這一行
    * 第二或第三空白會變成無限迴圈
* 在 for 迴圈生命週期中宣告的變數，可以在生命周期結束後再次宣告
* 在 for 迴圈內被宣告的變數每一輪都會被釋放，在下一輪又被創建
* 如果只有一行內容的話，大括號可以被省略，但如果加分號就會錯
```java=
public class ConterControlled {
    public static void main(String[] args) {
        int i;
        for (i =1; i < 11; i++)
            System.out.println(i);
    }
}
```
* 對初學者來說，控制變數盡量不要在迴圈內將內容做更改

## do while 迴圈
```java=
public class ConterControlled {
    public static void main(String[] args) {
        int i = 0;
        do {
            System.out.println(i);
            i++;
        } while (i > 10);
    }
}
```
* 執行順序和其他不同：第一次不用判斷無論如何都會執行，之後才會判斷

### break & continue



| break | continue |
| -------- | -------- |
| 會讓程式停止，馬上跳出大括號     | 忽略迴圈當圈     |
| 只在迴圈中使用 while, for, do while <br> switch (例外)     | 只在迴圈中使用 while, for, do while <br> switch (例外)     |

### return
結束程式，不限定在迴圈內使用
或用於回傳值

### 利用迴圈讓使用者輸入
#### 輸入某個數字後停止
```java=
public class MainClass {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n;
        while (true) {
            n = sc.nextInt();
            if (n == 1) {
                break;
            }
        }
    }
}
```
