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

