Java基礎(chǔ)之流程語句

一、順序結(jié)構(gòu)

? ? ? ? ? ? ? ? 代碼在執(zhí)行過程中如果沒有控制語句,代碼就會(huì)一句一句的執(zhí)行下去,直到結(jié)束。

二、選擇結(jié)構(gòu)

? ? ? ? ? ? ? 可分為兩種:if和switch兩種

? ? ? ? ? ? ?1、if ..else ?if-else語句或許是控制程序流程最基本的形式。其中的else是可選的

? ? ? ? ? ?格式如下:

? ? ? ? ? ?第一種結(jié)構(gòu)形式:

? ? ? ? ? ?if(boolean表達(dá)式)

? ? ? ? ? ?{

? ? ? ? ? ? ? ? ? ? ? ? ? 條件執(zhí)行體;

? ? ? ? ? ?}

? ? ? ? ? ?第二種結(jié)構(gòu)形式:

? ? ? ? ? ? ?if(boolean表達(dá)式){

? ? ? ? ? ? ? ? ? ? ? 條件執(zhí)行體A;

? ? ? ? ? ? ?}else{

? ? ? ? ? ? ? ? ? ? ? 條件執(zhí)行體B;

? ? ? ? ? ? ?}

? ? ? ? ? ?第三種結(jié)構(gòu)形式

? ? ? ? ? ?if(boolean表達(dá)式1){

? ? ? ? ? ? ? ? ? ? ? 條件執(zhí)行體A

? ? ? ? ? ?}

? ? ? ? ? else if (boolean表達(dá)式2)

? ? ? ? ? ?{

? ? ? ? ? ? ? ? ? ? ? 條件執(zhí)行體B

? ? ? ? ? ?[else if (boolean表達(dá)式)]

? ? ? ? ? ?}

? ? ? ? ? ?Else

? ? ? ? ? {

? ? ? ? ?條件執(zhí)行體C

? ? ? ? ? }

第三種if條件結(jié)構(gòu)形式分析:

? ? ? ?如果boolean表達(dá)式1結(jié)果為true,則執(zhí)行條件執(zhí)行體A,跳出判斷,否則執(zhí)行boolean表達(dá)式2。Boolean表達(dá)式2的結(jié)果為true,則執(zhí)行條件執(zhí)行體B,跳出循環(huán)。以此類推,if選擇結(jié)構(gòu)都是這樣逐一判斷下來。如果最后一個(gè)boolean表達(dá)式都為false,那么就執(zhí)行條件執(zhí)行體C。當(dāng)然過多的if也是非常不推薦的,下面就介紹switch,解決過多if的問題。

注意:Java不允許我們將一個(gè)數(shù)字作為布爾值使用,若想在一次布爾測試中使用一個(gè)非布爾值——比如在if(a)里,那么首先必須用 一個(gè)條件表達(dá)式將其轉(zhuǎn)換成一個(gè)布爾值,例如if(a!=0)。

2、Switch

“開關(guān)”(Switch)有時(shí)也被劃分為一種“選擇語句”。根據(jù)一個(gè)整數(shù)表達(dá)式的值,switch語句可從一系列 代碼選出一段執(zhí)行。它的格式如下:

switch(整數(shù)選擇因子) {

case整數(shù)值1 :語句1; break;

case整數(shù)值2 :語句2; break;

case整數(shù)值3 :語句3; break;

case整數(shù)值4 :語句4; break;

case整數(shù)值5 :語句5; break;

//..

default:語句;

}

? ? ?其中,“整數(shù)選擇因子”是一個(gè)特殊的表達(dá)式,能產(chǎn)生整數(shù)值。switch能將整數(shù)選擇因子的結(jié)果與每個(gè)整數(shù) 值比較。若發(fā)現(xiàn)相符的,就執(zhí)行對(duì)應(yīng)的語句(簡單或復(fù)合語句)。若沒有發(fā)現(xiàn)相符的,就執(zhí)行default語 句。 在上面的定義中,大家會(huì)注意到每個(gè)case均以一個(gè)break結(jié)尾。這樣可使執(zhí)行流程跳轉(zhuǎn)至switch主體的末 尾。這是構(gòu)建switch語句的一種傳統(tǒng)方式,但break是可選的。若省略break,會(huì)繼續(xù)執(zhí)行后面的case語 句的代碼,直到遇到一個(gè)break為止。就那上面的格式來說,如果將語句1,語句2后面的break去掉,當(dāng)整數(shù)因子為1時(shí),程序自然會(huì)執(zhí)行語句1,在沒有遇到break時(shí)它不會(huì)停止繼續(xù)執(zhí)行下去,語句2、語句3執(zhí)行完之后出現(xiàn)了break跳轉(zhuǎn)至switch主體的末 尾。事實(shí)上,我們可以理解為當(dāng)case選擇完成之后就不再存在了,switch主體中成為了順序結(jié)構(gòu)了,遇到break時(shí)才會(huì)跳出主體。整個(gè)注意最后的default語句沒有break,因?yàn)閳?zhí)行流程已到了break的跳轉(zhuǎn)目的地。但它要求使用一個(gè)選擇 因子,并且必須是(byte、short、int、char)這樣的整數(shù)值。對(duì)于非整數(shù)類型,則必須使用一系列if語句。

三、循環(huán)語句

1、while語句

格式:while(布爾表達(dá)式)

{

語句;

}

在循環(huán)剛開始時(shí),會(huì)計(jì)算一次“布爾表達(dá)式”的值。而對(duì)于后來每一次額外的循環(huán),都會(huì)在開始前重新計(jì)算 一次。如下從一數(shù)到十:

Int a2 = 1;

while (a2<=10)

{

System.out.println(a2);

a2++;

}

這個(gè)循環(huán)的作用是將1到10打印出來,循環(huán)剛開始a2=1與10判斷完成執(zhí)行方法體,a2自增,再與10比較于此類推直到a2=11時(shí)跳出循環(huán)。

2、do-while語句

do-while的格式如下:

do {

語句;

} while(布爾表達(dá)式);

while和do-while唯一的區(qū)別就是do-while肯定會(huì)至少執(zhí)行一次;也就是說,至少會(huì)將其中的語句“過一 遍”——即便表達(dá)式第一次便計(jì)算為false。而在while循環(huán)結(jié)構(gòu)中,若條件第一次就為false,那么其中的 語句根本不會(huì)執(zhí)行。在實(shí)際應(yīng)用中,while比do-while更常用一些。

3、for語句

for循環(huán)只進(jìn)行一次初始化。隨后,它會(huì)進(jìn)行條件測試,而且在每一次反復(fù)的時(shí)候,進(jìn)行自增或自減操作。

for循環(huán)的形式如下:

for(初始表達(dá)式;布爾表達(dá)式;循環(huán)后操作語句)

{

語句;

}

無論初始表達(dá)式,布爾表達(dá)式,還是循環(huán)后操作語句,都可以置空。每次反復(fù)前,都要測試一下布爾表達(dá)式。若獲得的 結(jié)果是false,就會(huì)繼續(xù)執(zhí)行緊跟在for語句后面的那行代碼。在每次循環(huán)的末尾,會(huì)執(zhí)行一次循環(huán)后操作語句。

//計(jì)算器從1數(shù)到10

for(int i = 1; i<=10 ; i++)

{

System.out.println(i);

}

注意變量i是在需要用到它的時(shí)候定義的——在for循環(huán)的控制表達(dá)式內(nèi)部,c的作用域是由for控制的表達(dá)式。 ?可在for語句里定義多個(gè)變量(一般選擇i,j,k,m這樣的字母定義變量)但它們必須具有同樣的類型:

for(int i = 0, j = 1; ? ? i < 10 && j != 11; ? ? i++, j++)

其中,for語句內(nèi)的int定義同時(shí)覆蓋了i和j。只有for循環(huán)才具備在控制表達(dá)式里定義變量的能力。對(duì)于 其他任何條件或循環(huán)語句,都不可采用這種方法。

4、嵌套循環(huán)

若外循環(huán)的循環(huán)次數(shù)是m次,內(nèi)循環(huán)的循環(huán)次數(shù)是n次,那么內(nèi)層循環(huán)的循環(huán)次數(shù)需要m * n次。

嵌套循環(huán)注意:

1.使用循環(huán)嵌套時(shí),內(nèi)層循環(huán)和外層循環(huán)的循環(huán)控制變量不能相同。

2.循環(huán)嵌套結(jié)構(gòu)的書寫,最好采用“右縮進(jìn)”格式,以體現(xiàn)循環(huán)層次的關(guān)系。

四、控制循環(huán)結(jié)構(gòu)

1、單個(gè)循環(huán)跳出

在任何循環(huán)語句的主體部分,亦可用break和continue控制循環(huán)的流程。其中,break用于強(qiáng)行退出循環(huán), 不執(zhí)行循環(huán)中剩余的語句。(跳出循環(huán))而continue則停止執(zhí)行當(dāng)前的反復(fù),然后退回循環(huán)起始和,開始新的反復(fù)。(跳過continue當(dāng)前這一次循環(huán)體,開始下一次循環(huán)。)return表示結(jié)束循環(huán)所在的方法,方法都結(jié)束了,循環(huán)結(jié)構(gòu)自然也就結(jié)束了,并且返回相應(yīng)的值

就以下面的程序?yàn)槔?/p>

public class Demo

{

public static void main(String[] args)

{

//在第四次的時(shí)候終止循環(huán)

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

if(i==5)

break;

System.out.println("我已經(jīng)輸出了"+i+"次");

if(i==4)

return ;

}

//輸出12以內(nèi)三的倍數(shù)continue循環(huán)

for(int i = 1; i<12 ; i++)

{

if(!(i%3==0))

continue;

System.out.print(i+" ?");

}

}

}

輸出結(jié)果為:

我已經(jīng)輸出了1次

我已經(jīng)輸出了2次

我已經(jīng)輸出了3次

我已經(jīng)輸出了4次

如果沒有這個(gè)代碼塊輸出結(jié)果為:

我已經(jīng)輸出了1次

我已經(jīng)輸出了2次

我已經(jīng)輸出了3次

我已經(jīng)輸出了4次

3 ?6 ?9 ?12

首先分析break,如果沒有break我們知道程序會(huì)打印出十條輸出語句,加上下一個(gè)循環(huán)輸出的:3 ?6 ?9 ?12當(dāng)加上break時(shí),系統(tǒng)輸出的結(jié)果是打印四條輸出語句加上3 ?6 ?9 ?12說明break終止了本次循環(huán)而繼續(xù)往下面執(zhí)行。對(duì)于continue如果不存在結(jié)果會(huì)打印出1到12連續(xù)的12個(gè)數(shù),當(dāng)加上continue之后,它遇到不是三的倍數(shù)就終止了本次循環(huán)繼續(xù)下一次循環(huán)得到三的倍數(shù)。說明continue只是終止本次循環(huán)繼續(xù)下一次循環(huán)。當(dāng)我在第一個(gè)for循環(huán)中加入一個(gè)return之后,下面的那個(gè)循環(huán)根本就沒有進(jìn)行, 說明return跳出的的方法體而不是這個(gè)循環(huán)語句。

2、嵌套循環(huán)跳出

唯一用到標(biāo)簽的地方是在循環(huán)語句之前。在循環(huán)之前設(shè)置標(biāo)簽的唯一理由是:希望在其中嵌套另 一個(gè)循環(huán)或者一個(gè)開關(guān)。這是由于break和continue關(guān)鍵字通常只中斷當(dāng)前循環(huán),但若隨同標(biāo)簽使用,它們 就會(huì)中斷到存在標(biāo)簽的地方。如下所示:

label1:外部循環(huán)

{

內(nèi)部循環(huán)

{

//... break; //1

//... continue; //2

//... continue label1; //3

//... break label1; //4

}

}

如果沒有break outer語句,就沒有辦法在一個(gè)內(nèi)部循環(huán)里找到出外部循環(huán)的路徑。這是由于break本身只 能中斷最內(nèi)層的循環(huán)(對(duì)于continue同樣如此)。在條件1中,break中斷內(nèi)部循環(huán),并在外部循環(huán)結(jié)束。在條件2中,continue移回內(nèi)部循環(huán)的起始處。但 在條件3中,continue label1卻同時(shí)中斷內(nèi)部循環(huán)以及外部循環(huán),并移至label1處。隨后,它實(shí)際是繼續(xù) 循環(huán),但卻從外部循環(huán)開始。在條件4中,break label1也會(huì)中斷所有循環(huán),并回到label1處,但并不重 新進(jìn)入循環(huán)。也就是說,它實(shí)際是完全中止了兩個(gè)循環(huán)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容