跳轉語句
直接上代碼:
/**
* 跳轉指令
*/
public static void GoTo(){
for (int j = 0; j < 10 ; j++) { //1
for (int i = 0; i<10;i++){ //2
if (i>5) {
System.out.println(j+" "+ i);
continue;
}
System.out.println("contine沒有跳出"); //3
}
}
}
- continue:表示跳出本次循環,即所在層循環中,continue之後的代碼(3)不再執行。繼續執行2 層的下一次循環。
- 但是,該語句可以通過 “參數”指定跳轉位置,改變跳轉的方向。如下:
/**
* 跳轉指令
*/
public static void GoTo(){
outer:for (int j = 0; j < 10 ; j++) { //1
for (int i = 0; i<10;i++){ //2
if (i>5) {
System.out.println(j+" "+ i);
continue outer;
}
}
}
}
public static void GoTo(){
for (int j = 0; j < 10 ; j++) { //1
for (int i = 0; i<10;i++){ //2
if (i>5) {
System.out.println(j+" "+ i);
break;
}
}
}
}
- 以上代碼通過 指定了continue的跳轉位置,所以在此處相當於break
- break 是跳出所在層循環,即第2層 ,繼續執行第 1層的下一次循環。
- 通過該方法可以跳出多重循環:
/**
* 跳轉指令
*/
public static void GoTo(){
outer:for (int j = 0; j < 10 ; j++) {
for (int i = 0; i < 10; i++) {
for (int px = 1; px < 10; px++) {
if (i > 5) {
System.out.println(j + " " + i);
continue outer;
}
}
}
}
}
直接跳到最外層循環。
continue 與break的巧妙應用
/**
* 計算1000 以內10個最大質數和
*/
public static void Sum(){
int sum =0,i = 0;
outer:for(int j = 1000;j>2;j--){
for(int x = 2;x<j/2;x++){
if(j%x == 0){
continue outer;
}
}
i++;
sum += j;
if(i<10){
//1 - 9 9個數
System.out.print(j + "+");
}else{
//第 10 個數
System.out.println(j +"="+sum);
break;
}
}
}
分析:1. 當 j 不是質數時,會執行到continue -> outer:,跳出判斷質數的循環,回到最外層繼續繼續尋找下一個質數。
2. 如果換成break之後,發生錯誤。前後對比:
切換成break後,break(第一個)跳出內層for循環,繼續執行 i++... ,相當於內層for循環沒起作用。
第二個break是,在找到 10 個質數後,跳出最外層循環,不再尋找下一個質數。