1. break 語句
break 語句的用途:
- 退出循環語句。
- 退出 switch 語句。
- 使用帶标簽的 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 語句。這些語句完全是可選的,即不使用它們也可以表達同樣的邏輯含義。