天天看點

Java break 和 continue 中斷控制流程的語句(學習 Java 程式設計語言 021)

1. break 語句

break 語句的用途:

  1. 退出循環語句。
  2. 退出 switch 語句。
  3. 使用帶标簽的 break 語句跳出多重嵌套的循環語句。

1.1 退出循環結構

while(years <= 100) {
    double interest = balance * interestRate / 100;
    balance += interest;
    if(balance >= goal) {
        break;
    }
    years++;
}
           

在循環開始時,如果

years > 100

,或者在循環體中

balance >= goal

,則退出循環語句。當然,也可以在不使用 break 的情況下計算 years 的值,如下所示:

while(years <= 100 && balance < goal) {
    double interest = balance * interestRate / 100;
    balance += interest;
    if(balance < goal) {
        years++;
    }    
}
           

在上述的代碼中,檢測了兩次

balance < goal

。為了避免重複檢測,有些程式員更加偏愛使用 break 語句。

1.2 退出 switch 語句

switch 語句将從與選項值相比對的 case 标簽開始執行,直到遇到 break 語句,或者執行到 switch 語句的結束處為止。

Scanner in = new Scanner(System.in);
System.out.println("請輸入 1、2、3、4 !");
int choice = in.nextInt();
switch(choice) {
    case 1:
        System.out.println("輸入的值為: " + choice);
        break;
    case 2:
        System.out.println("輸入的值為: " + choice);
        break;
    case 3:
        System.out.println("輸入的值為: " + choice);
        break;
    case 4:
        System.out.println("輸入的值為: " + choice);
        break;
    default:
        System.out.println("bad input");
        break;
}
           

1.3 帶标簽的 break 語句

有時候,在嵌套很深的循環語句中會發生一些不可預料的事情。此時可能更加希望跳出所有嵌套循環之外。如果隻是為各層循環檢測添加一些額外的條件,這會很不友善。

用下面的一個示例說明 break 語句的工作狀态。請注意,标簽必須放在希望跳出的最外層循環之前,并且必須緊跟一個冒号。

Scanner in = new Scanner(System.in);
int n = 0;
int count = 300;

read_data:
while(count > 0) {
    System.out.println("請輸入大于等于等于零的數字:");
    for(int i = 0; i < 30; i++) {
        n = in.nextInt();
        if(n < 0) {
            break read_data;
        }
    }
    count--;
}
// 執行 break 标簽,會直接跳到此處
System.out.println(n);
           

如果輸入有誤,執行帶标簽的 break 會跳轉到标簽的語句塊末尾。與任何使用 break 語句代碼一樣,然後需要檢測循環是正常結束,還是有 break 跳轉。

可以将标簽應用到任何語句中,甚至可以應用到 if 語句或者塊語句中:

label:
{
    ...
    if(condition) break label;
    ...
}
// 執行 break 标簽,會直接跳到此處
           

不提倡使用帶标簽的 break 語句,帶标簽的 break 語句隻能跳出語句塊,而不能跳入語句塊。

2. continue 語句

continue 語句中斷正常的控制流程并将控制轉移到最内層循環的首部。

Scanner in = new Scanner(System.in);
while (sum < goal)
{
    System.out.print("請出入一個數字: ");
    n = in.next();
    if (n < 0) continue; // 執行循環首部
    sum += n;
}
           

如果 n < 0,則 continue 語句越過了目前循環體的剩餘部分,立刻跳到循環首部。

如果将 continue 語句用語 for 循環中,就可以跳到 for 循環的“更新”部分。

Scanner in = new Scanner(System.in);
int n = 0;
int sum = 0;
int count;

for (count = 0; count < 3; count++)
{
    System.out.print("Enter a number, -1 to quit: ");
    n = in.nextInt();
    if (n < 0) continue;
    sum += n; // 如果 n < 0,此處不執行。
}

System.out.println("sum = " + sum);
           

如果 n < 0,則 continue 語句跳到 count++ 語句。

還有一種帶标簽的 continue 語句,将跳到與标簽比對的循環首部。

許多程式員發現很容易混淆 break 和 continue 語句。這些語句完全是可選的,即不使用它們也可以表達同樣的邏輯含義。