學(xué)習(xí)Java之如何正確地跳出循環(huán)結(jié)構(gòu)
一. break
1. 作用
break關(guān)鍵字可以用于for、while、do-while及switch語句中,用來跳出整個語句塊,結(jié)束當(dāng)前循環(huán)的執(zhí)行。 另外我們要特別注意,break 語句總是跳出自己所在的那一層循環(huán) 。 當(dāng)兩個for循環(huán)嵌套時,如果break語句位于內(nèi)層的for循環(huán),它只會跳出內(nèi)層的for循環(huán),但不會跳出外層的for循環(huán)。
2. 語法
break的用法很簡單,我們在之前學(xué)習(xí)switch時就已經(jīng)使用過了。一般就是在循環(huán)或switch語句中編寫如下一條語句:
break;
比如我們使用for循環(huán)計算從1累加到100的和時,在循環(huán)內(nèi)部,我們可以使用if判斷,當(dāng)i==50就提前利用break關(guān)鍵字結(jié)束循環(huán)。因此,break經(jīng)常會配合if語句使用。
3. 案例
3.1 案例一
break會跳出當(dāng)前for循環(huán)。當(dāng)break執(zhí)行后,當(dāng)前整個for循環(huán)都會結(jié)束執(zhí)行。
/** * @author */ public class Demo01 { public static void main(String[] args) { //break關(guān)鍵字 //需求:從1累加到100,找到累加到哪個數(shù)時,就使得sum和大于888 // 定義變量保存總和 int sum = 0; for (int i = 1; i <= 100; i++) { sum = sum + i; if (sum > 888) { System.out.println("累加到"+i+"時,sum和就大于888"); // 結(jié)束當(dāng)前循環(huán) break; //這里的語句執(zhí)行不到,編譯階段就會報錯 //System.out.println("能執(zhí)行嗎??"); } //這里的語句可以執(zhí)行,當(dāng)break跳出循環(huán)后,就不會再繼續(xù)執(zhí)行 System.out.println("能執(zhí)行嗎??"+i); } } }
大家要注意,我們不能直接在break后面跟著其他語句,否則在編譯階段就會出現(xiàn)”Unreachable code“,如下圖所示:
3.2 案例二
需求:將輸入的內(nèi)容進行輸出,如果輸入"886"就結(jié)束當(dāng)前聊天。
/** * @author */ import java.util.Scanner; public class Demo02 { public static void main(String[] args) { //break關(guān)鍵字 Scanner sc = new Scanner(System.in); while(true){ String word = sc.next(); if(word.equals("886")){ //跳出當(dāng)前循環(huán) break; } //輸出內(nèi)容 System.out.println(word); } } }
二. continue
1. 作用
continue適用于各種循環(huán)結(jié)構(gòu)中,不能用于其他地方,用于跳過本次循環(huán),執(zhí)行下一次循環(huán) 。 break可以跳出當(dāng)前循環(huán),即整個循環(huán)都不會執(zhí)行了。而與break不同,continue是提前結(jié)束本次循環(huán),但會繼續(xù)執(zhí)行下一次的循環(huán)。在多層嵌套的循環(huán)中,continue也可以通過標(biāo)簽指明要跳過的是哪一層循環(huán),并且同樣是只結(jié)束自己所在的循環(huán)。
2.語法
continue的用法很簡單,在循環(huán)結(jié)構(gòu)中直接使用如下語句即可:
continue;
3. 案例
3.1 案例一
需求:輸出100以內(nèi),所有不是3的倍數(shù)的整數(shù)。使用continue結(jié)束當(dāng)前循環(huán),繼續(xù)下一次循環(huán)。
/** * @author */ public class Demo03 { public static void main(String[] args) { //continue關(guān)鍵字 //案例:輸出100以內(nèi),所有不是3的倍數(shù)的整數(shù) for(int i = 1; i <= 100 ; i++){ if(i % 3 == 0){ //結(jié)束本次循環(huán),繼續(xù)執(zhí)行下次循環(huán),并不會結(jié)束整個循環(huán),直到完成整個循環(huán) continue; } System.out.println(i); } } }
3.2 案例二
需求:將輸入的內(nèi)容進行輸出,如果輸入"886"就結(jié)束當(dāng)前聊天。如果輸入了敏感詞匯,則用“***”替代顯示。
/** * @author */ import java.util.Scanner; public class Demo04 { public static void main(String[] args) { //continue關(guān)鍵字 //需求:將輸入的內(nèi)容進行輸出,如輸入"886"就結(jié)束當(dāng)前聊天。如輸入了敏感詞匯,則用“***”替代顯示 Scanner sc = new Scanner(System.in); while(true){ String word = sc.next(); if(word.equals("886")){ //跳出整個循環(huán) break; } if(word.equals("WC")||word.equals("SB")){ System.out.println("***"); //中止本次循環(huán),繼續(xù)下一次循環(huán) continue; } System.out.println(word); } } }
4. 多層循環(huán)嵌套時的跳轉(zhuǎn)
當(dāng)多層循環(huán)嵌套時,內(nèi)層循環(huán)可以使用外層循環(huán)中的變量。外層循環(huán)每循環(huán)一次,內(nèi)層循環(huán)都會完整的執(zhí)行完內(nèi)層循環(huán)的所有次數(shù)。break/continue只會控制當(dāng)前的循環(huán),當(dāng)多層循環(huán)嵌套時,為了便于控制,我們可以通過給循環(huán)設(shè)定標(biāo)簽的形式來進行控制。
4.1 語法
多層循環(huán)嵌套時,帶有標(biāo)簽的語法結(jié)構(gòu)如下:
label1: { …… label2: { …… label3: { …… break label2; } } }
當(dāng)有多層循環(huán)嵌套,我們可以給每一次循環(huán)起個標(biāo)簽名稱,名稱隨意,只要符合java里的標(biāo)識符命名規(guī)則即可。然后結(jié)合break或者continue就可以結(jié)束當(dāng)前或本次循環(huán)。
4.2 案例
這里是多層循環(huán)嵌套時帶有標(biāo)簽的案例,供大家參考如下:
/** * @author */ public class Demo07 { public static void main(String[] args) { //多層循環(huán)嵌套 //打印5行5列的矩形,用 * 表示 label01:for(int i = 1 ; i <= 5 ;i++){ //控制行 label02:for(int j = 1 ; j <= 5 ; j++){//控制列 System.out.print(" * "); //當(dāng)執(zhí)行到第3列時,提前跳出循環(huán) if(j==3) { break label02; //continue label02; } } //進行換行 System.out.println(); } } }
三. return
關(guān)于return關(guān)鍵字,今天先簡單介紹以后,后面我們在學(xué)習(xí)Java的”方法“時會詳細(xì)講解!
1. 作用
return并不是專門用來結(jié)束循環(huán)的關(guān)鍵字,它可以用來結(jié)束一個方法或循環(huán)。當(dāng)一個方法執(zhí)行到return語句時,該方法就會被結(jié)束。與break和continue不同的是,return是直接結(jié)束整個方法,不管這個return處在多少層的循環(huán)之內(nèi)。
2. 語法
return關(guān)鍵字的基本語法如下:
訪問修飾符 返回值類型 方法名(參數(shù)...){ //方法體 //注意:這里返回值的類型必須與方法上聲明的返回值類型一致! return 返回值; }
3. 案例
因為return的用法,主要是和java里的”方法“有關(guān)系,所以在這里先簡單給大家展示兩個基本的案例,以后我們再詳細(xì)學(xué)習(xí)方法和return的內(nèi)容。
3.1 案例一
在方法中返回值指定類型的結(jié)果。
/** * @author */ public class Demo05 { public static void main(String[] args) { // return關(guān)鍵字 //調(diào)用定義的方法,并獲取返回結(jié)果 String result = sayHello(); System.out.println("result="+result); } //定義一個帶有String類型返回值的方法 //訪問修飾符 返回值類型 public static String sayHello() { //本方法中只能返回String類型 return "Hello,壹壹哥!"; } }
3.2 案例二
return也可以在循環(huán)中使用,用于結(jié)束整個循環(huán)。
/** * @author */ public class Demo06 { public static void main(String[] args) { // return關(guān)鍵字 for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) { if (i + j == 10) { //結(jié)束整個循環(huán)的執(zhí)行,無論循環(huán)的層次 return; } System.out.println("i = " + i + ",j = " + j + ",i + j = " + (i + j)); } } //這里執(zhí)行不到 System.out.println("循環(huán)之后的語句"); } }
四. 結(jié)語
至此,就把return、break、continue這三個關(guān)鍵字給大家講解完畢了,現(xiàn)在你知道它們?nèi)叩挠梅捌鋮^(qū)別了嗎?接下來就給大家對這幾個關(guān)鍵字進行一下總結(jié)。
1. break與continue的對比
1.1 特點不同
- break語句可以跳出當(dāng)前循環(huán);
- break語句通常配合if來使用,在滿足條件時可以提前結(jié)束整個循環(huán);
- break語句總是跳出最近的一層循環(huán);
- continue語句可以提前結(jié)束本次循環(huán);
- continue語句也可以配合if語句,在滿足條件時提前結(jié)束本次循環(huán)。
1.2 使用場合不同
- break可用于switch結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中;
- continue只能用于循環(huán)結(jié)構(gòu)中。
1.3 作用不同
- break語句用于終止某個循環(huán),程序跳轉(zhuǎn)到循環(huán)塊外的下一條語句中;
- continue語句用于跳出本次循環(huán),進入到下一次循環(huán)。
2. continue、break、return三者的對比
- break:結(jié)束所在的循環(huán);
- continue:跳過本次循環(huán),繼續(xù)下一次循環(huán);
- return:結(jié)束整個方法。
以上就是給大家總結(jié)的今天的重點內(nèi)容,希望你要熟練記憶這些特性哦。
以上就是學(xué)習(xí)Java之如何正確地跳出循環(huán)結(jié)構(gòu)的詳細(xì)內(nèi)容,更多關(guān)于Java 跳出循環(huán)結(jié)構(gòu)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Rabbitmq延遲隊列實現(xiàn)定時任務(wù)的方法
這篇文章主要介紹了Rabbitmq延遲隊列實現(xiàn)定時任務(wù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05JAVA開發(fā)中的一些規(guī)范講解(阿里巴巴Java開發(fā)規(guī)范手冊)
這篇文章主要介紹了JAVA開發(fā)中的一些規(guī)范講解(阿里巴巴Java開發(fā)規(guī)范手冊),需要的朋友可以參考下2018-04-04springmvc參數(shù)為對象,數(shù)組的操作
這篇文章主要介紹了springmvc參數(shù)為對象,數(shù)組的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08Spring?Data?JPA實現(xiàn)查詢結(jié)果返回map或自定義的實體類
這篇文章主要介紹了Spring?Data?JPA實現(xiàn)查詢結(jié)果返回map或自定義的實體類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12Spring?Security實現(xiàn)基于RBAC的權(quán)限表達式動態(tài)訪問控制的操作方法
這篇文章主要介紹了Spring?Security實現(xiàn)基于RBAC的權(quán)限表達式動態(tài)訪問控制,資源權(quán)限表達式動態(tài)權(quán)限控制在Spring Security也是可以實現(xiàn)的,首先開啟方法級別的注解安全控制,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04Java中Optional.of()方法及源碼解析(非常詳細(xì)!)
這篇文章主要給大家介紹了關(guān)于Java中Optional.of()方法及源碼解析的相關(guān)資料,Java中java.util .Optional類的of()方法用于獲得該Optional類中具有指定類型的指定值的一個實例,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06