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