編寫此文僅為以後可以複習。 最近在自學Java核心技術(很好的書,推薦!!),也是第一次從上面瞭解了goto,或許只是淺層瞭解。 錯誤之處希望大佬們給予批評與建議!!謝謝!!! Java核心技術中就提到過:無限制的使用goto語句確實是導致錯誤的根源,但是有些情況下,偶爾使用goto 跳出迴圈 還是 ...
編寫此文僅為以後可以複習。
最近在自學Java核心技術(很好的書,推薦!!),也是第一次從上面瞭解了goto,或許只是淺層瞭解。
錯誤之處希望大佬們給予批評與建議!!謝謝!!!
Java核心技術中就提到過:無限制的使用goto語句確實是導致錯誤的根源,但是有些情況下,偶爾使用goto 跳出迴圈 還是有益處的。
下麵首先看一下不帶goto標簽的break語句:
while ( years <= 100 ){
balance += payment;
double interest = balance * interestRate / 100;
balance += interest;
if ( balance >= goal ) break;
years++;
}
很簡單的break迴圈,在迴圈開始時,如果years > 100,或者在迴圈體中balance >= goal,則退出迴圈語句。
下麵是帶goto標簽的break語句,請註意,標簽必須放在希望跳出的最外層迴圈之前,並且必須緊跟一個冒號,:
Scanner in = new Scanner(System.in);
int n;
read_data:
while(. . .) //這個迴圈語句用標簽加標簽
{
. . .
for (. . .) //這個內部迴圈沒有標記
{
System.out.print("Enter a number >= 0: ");
n = in.nextInt();
if(n < 0) //不應該發生-不能繼續
break read_data;
//返回 read_data 迴圈
. . .
}
}
// 此語句在標記中斷後立即執行
if (n < 0) // 檢查不良情況
{
// 處理不良情況
}
else
{
// 進行正常加工
}
如果輸入有誤,通過執行帶標簽的break跳轉到帶標簽的語句塊末尾。對於任何使用break語句的代碼都要檢測迴圈是正常結束,還是由break跳出。
事實上,可以將標簽應用到任何語句中,甚至可以應用到if語句或者塊語句中,如下所示:
label: { . . . if(condition) break label;// exits block . . . } //當中斷語句執行時跳轉到這裡
因此,如果希望使用一條goto語句,並將一個標簽放在想要跳轉的語句塊之前,就可以使用break語句!當然,前面說過了Java語句中不提倡,大家瞭解就行。
另外,只能跳出語句塊,而不能跳入語句塊。