如何跳出當前的多重迴圈?

來源:互聯網
上載者:User

最近看到一個筆試題:
如何跳出當前的多重迴圈?


但是看到好多的答案:break,return,覺得這個答案似乎有些不妥

於是仔細推導一番

首先,不建議使用return跳出迴圈,題目也說到了是多重迴圈,


如果使用return的話,會跳出整個函數,那後續的代碼豈不是無法執行

所以在這裡,整理了一下自己的看法,


目前瞭解到的一些迴圈有for,while,do while,switch


下面一一說明


public static void main(String[] args) {

//使用break,或者標記break


ok:for(int i=0;i<10;i++){


System.out.println("xxx");


for(int j=0;j<10;j++){


if(j>2)


break;//==return;


System.out.println(j);


}


}


這裡需要說明的是,ok是用來標記跳出哪一個迴圈


當ok標記在第一層(最外層)迴圈的時候,相當於return的功能,跳出整個迴圈


"xxx"只會輸出一次


而當ok標記在第二層的時候,將相當於break的功能,只跳出當前的迴圈


而"xxx"會在不執行第二層的情況下,完成第一層的迴圈


for(int i=0;i<10;i++){


System.out.println("xxx");


ok:for(int j=0;j<10;j++){


if(j>2)


break ok;//==break;


System.out.println(j);


}


}

//使用自訂的boolean變數,配合迴圈條件一起共同滿足方可執行迴圈

//另外需要注意的時候,在跳出條件成立時,不僅設定flag的值,同時也要加上break


這裡需要說明的是,!flag是用來標記跳出哪一個迴圈


當!flag標記在第一層(最外層)迴圈的時候,如果跳出條件成立,則會關閉第一層的迴圈


相當於return;的功能


boolean flag=false;


for(int i=0;i<5&&!flag;i++){


System.out.println("xxx");


for(int j=0;j<5;j++){


if(j>2){


flag=true;break;


//上面兩句的功能等價於 return;


}


System.out.println(j);


}


}

當!flag標記在第二層的時候,


程式會先執行一次"xxx",然後再執行第二層迴圈,當跳出條件成立時,就關閉當前的迴圈


而下一次迴圈時,只會執行第一層的迴圈,記住,這個!flag是關閉迴圈,而不是跳出


boolean flag=false;


for(int i=0;i<5;i++){


System.out.println("xxx");


for(int j=0;j<5&&!flag;j++){


if(j>2){


flag=true;


break;


}


System.out.println(j);


}


}

最後一種才是所謂的break,由一層迴圈開始,到第二層。


當跳出條件成立,就跳出當前的迴圈,


繼而又從一層開始迴圈,在到第二層,又等到跳出條件成立,從一層開始


周而復始


for(int i=0;i<5;i++){


System.out.println("xxx");


for(int j=0;j<5;j++){


if(j>2){


break;


}


System.out.println(j);


}


}

另外,對於while和switch都可使用標記,但是貌似switch目前還不會用boolean值做條件

int i=0;
ok:while(true){
i++;
System.out.println(i);
if(i==5)
break ok;
}

int i=0;


boolean flag=false;


while(true&&!flag){


i++;


System.out.println(i);


if(i==5)


flag=true;


}

int i=0;
ok:do{
i++;
System.out.println(i);
if(i==5)
break ok;
}while(true);

int i=0;


boolean flag=false;


do{


i++;


System.out.println(i);


if(i==5)


flag=true;


}while(true&&!flag);

貌似 switch只能用標記吧


int x=3;


ok:switch(x){


case 1:


x*=10;


break;


case 2:


x*=10;


break;


case 3:


x*=10;


break ok;


case 4:


x*=10;


break;


default:


x=0;


}


System.out.println(x);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.