一、順序結(jié)構(gòu)
? ? ? ? ? ? ? ? 代碼在執(zhí)行過(guò)程中如果沒(méi)有控制語(yǔ)句景用,代碼就會(huì)一句一句的執(zhí)行下去盗迟,直到結(jié)束坤邪。
二、選擇結(jié)構(gòu)
? ? ? ? ? ? ? 可分為兩種:if和switch兩種
? ? ? ? ? ? ?1罚缕、if ..else ?if-else語(yǔ)句或許是控制程序流程最基本的形式艇纺。其中的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)都是這樣逐一判斷下來(lái)无埃。如果最后一個(gè)boolean表達(dá)式都為false织阅,那么就執(zhí)行條件執(zhí)行體C。當(dāng)然過(guò)多的if也是非常不推薦的,下面就介紹switch皂冰,解決過(guò)多if的問(wèn)題柳弄。
注意:Java不允許我們將一個(gè)數(shù)字作為布爾值使用,若想在一次布爾測(cè)試中使用一個(gè)非布爾值——比如在if(a)里纤控,那么首先必須用 一個(gè)條件表達(dá)式將其轉(zhuǎn)換成一個(gè)布爾值,例如if(a!=0)舱呻。
2、Switch
“開關(guān)”(Switch)有時(shí)也被劃分為一種“選擇語(yǔ)句”悠汽。根據(jù)一個(gè)整數(shù)表達(dá)式的值箱吕,switch語(yǔ)句可從一系列 代碼選出一段執(zhí)行。它的格式如下:
switch(整數(shù)選擇因子) {
case整數(shù)值1 :語(yǔ)句1; break;
case整數(shù)值2 :語(yǔ)句2; break;
case整數(shù)值3 :語(yǔ)句3; break;
case整數(shù)值4 :語(yǔ)句4; break;
case整數(shù)值5 :語(yǔ)句5; break;
//..
default:語(yǔ)句;
}
? ? ?其中柿冲,“整數(shù)選擇因子”是一個(gè)特殊的表達(dá)式茬高,能產(chǎn)生整數(shù)值。switch能將整數(shù)選擇因子的結(jié)果與每個(gè)整數(shù) 值比較假抄。若發(fā)現(xiàn)相符的怎栽,就執(zhí)行對(duì)應(yīng)的語(yǔ)句(簡(jiǎn)單或復(fù)合語(yǔ)句)。若沒(méi)有發(fā)現(xiàn)相符的宿饱,就執(zhí)行default語(yǔ) 句熏瞄。 在上面的定義中,大家會(huì)注意到每個(gè)case均以一個(gè)break結(jié)尾谬以。這樣可使執(zhí)行流程跳轉(zhuǎn)至switch主體的末 尾巴刻。這是構(gòu)建switch語(yǔ)句的一種傳統(tǒng)方式,但break是可選的蛉签。若省略break胡陪,會(huì)繼續(xù)執(zhí)行后面的case語(yǔ) 句的代碼,直到遇到一個(gè)break為止碍舍。就那上面的格式來(lái)說(shuō)柠座,如果將語(yǔ)句1,語(yǔ)句2后面的break去掉片橡,當(dāng)整數(shù)因子為1時(shí)妈经,程序自然會(huì)執(zhí)行語(yǔ)句1,在沒(méi)有遇到break時(shí)它不會(huì)停止繼續(xù)執(zhí)行下去捧书,語(yǔ)句2吹泡、語(yǔ)句3執(zhí)行完之后出現(xiàn)了break跳轉(zhuǎn)至switch主體的末 尾。事實(shí)上经瓷,我們可以理解為當(dāng)case選擇完成之后就不再存在了爆哑,switch主體中成為了順序結(jié)構(gòu)了,遇到break時(shí)才會(huì)跳出主體舆吮。整個(gè)注意最后的default語(yǔ)句沒(méi)有break揭朝,因?yàn)閳?zhí)行流程已到了break的跳轉(zhuǎn)目的地。但它要求使用一個(gè)選擇 因子色冀,并且必須是(byte潭袱、short、int锋恬、char)這樣的整數(shù)值屯换。對(duì)于非整數(shù)類型,則必須使用一系列if語(yǔ)句与学。
三彤悔、循環(huán)語(yǔ)句
1、while語(yǔ)句
格式:while(布爾表達(dá)式)
{
語(yǔ)句癣防;
}
在循環(huán)剛開始時(shí)蜗巧,會(huì)計(jì)算一次“布爾表達(dá)式”的值。而對(duì)于后來(lái)每一次額外的循環(huán)蕾盯,都會(huì)在開始前重新計(jì)算 一次幕屹。如下從一數(shù)到十:
Int a2 = 1;
while (a2<=10)
{
System.out.println(a2);
a2++;
}
這個(gè)循環(huán)的作用是將1到10打印出來(lái),循環(huán)剛開始a2=1與10判斷完成執(zhí)行方法體级遭,a2自增望拖,再與10比較于此類推直到a2=11時(shí)跳出循環(huán)。
2挫鸽、do-while語(yǔ)句
do-while的格式如下:
do {
語(yǔ)句;
} while(布爾表達(dá)式);
while和do-while唯一的區(qū)別就是do-while肯定會(huì)至少執(zhí)行一次说敏;也就是說(shuō),至少會(huì)將其中的語(yǔ)句“過(guò)一 遍”——即便表達(dá)式第一次便計(jì)算為false丢郊。而在while循環(huán)結(jié)構(gòu)中盔沫,若條件第一次就為false医咨,那么其中的 語(yǔ)句根本不會(huì)執(zhí)行。在實(shí)際應(yīng)用中架诞,while比do-while更常用一些拟淮。
3、for語(yǔ)句
for循環(huán)只進(jìn)行一次初始化谴忧。隨后很泊,它會(huì)進(jìn)行條件測(cè)試,而且在每一次反復(fù)的時(shí)候沾谓,進(jìn)行自增或自減操作委造。
for循環(huán)的形式如下:
for(初始表達(dá)式;布爾表達(dá)式;循環(huán)后操作語(yǔ)句)
{
語(yǔ)句;
}
無(wú)論初始表達(dá)式均驶,布爾表達(dá)式昏兆,還是循環(huán)后操作語(yǔ)句,都可以置空辣恋。每次反復(fù)前亮垫,都要測(cè)試一下布爾表達(dá)式。若獲得的 結(jié)果是false伟骨,就會(huì)繼續(xù)執(zhí)行緊跟在for語(yǔ)句后面的那行代碼饮潦。在每次循環(huán)的末尾,會(huì)執(zhí)行一次循環(huán)后操作語(yǔ)句携狭。
//計(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語(yǔ)句里定義多個(gè)變量(一般選擇i,j,k,m這樣的字母定義變量)但它們必須具有同樣的類型:
for(int i = 0, j = 1; ? ? i < 10 && j != 11; ? ? i++, j++)
其中逛腿,for語(yǔ)句內(nèi)的int定義同時(shí)覆蓋了i和j稀并。只有for循環(huán)才具備在控制表達(dá)式里定義變量的能力。對(duì)于 其他任何條件或循環(huán)語(yǔ)句单默,都不可采用這種方法碘举。
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)語(yǔ)句的主體部分完箩,亦可用break和continue控制循環(huán)的流程赐俗。其中,break用于強(qiáng)行退出循環(huán)嗜憔, 不執(zhí)行循環(huán)中剩余的語(yǔ)句秃励。(跳出循環(huán))而continue則停止執(zhí)行當(dāng)前的反復(fù),然后退回循環(huán)起始和吉捶,開始新的反復(fù)。(跳過(guò)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次
如果沒(méi)有這個(gè)代碼塊輸出結(jié)果為:
我已經(jīng)輸出了1次
我已經(jīng)輸出了2次
我已經(jīng)輸出了3次
我已經(jīng)輸出了4次
3 ?6 ?9 ?12
首先分析break,如果沒(méi)有break我們知道程序會(huì)打印出十條輸出語(yǔ)句流炕,加上下一個(gè)循環(huán)輸出的:3 ?6 ?9 ?12當(dāng)加上break時(shí)澎现,系統(tǒng)輸出的結(jié)果是打印四條輸出語(yǔ)句加上3 ?6 ?9 ?12說(shuō)明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ù)。說(shuō)明continue只是終止本次循環(huán)繼續(xù)下一次循環(huán)渠欺。當(dāng)我在第一個(gè)for循環(huán)中加入一個(gè)return之后妹蔽,下面的那個(gè)循環(huán)根本就沒(méi)有進(jìn)行, 說(shuō)明return跳出的的方法體而不是這個(gè)循環(huán)語(yǔ)句挠将。
2胳岂、嵌套循環(huán)跳出
唯一用到標(biāo)簽的地方是在循環(huán)語(yǔ)句之前。在循環(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
}
}
如果沒(méi)有break outer語(yǔ)句产园,就沒(méi)有辦法在一個(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)。也就是說(shuō)族展,它實(shí)際是完全中止了兩個(gè)循環(huán)森缠。