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

一、順序結(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)森缠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仪缸,隨后出現(xiàn)的幾起案子贵涵,更是在濱河造成了極大的恐慌,老刑警劉巖恰画,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宾茂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拴还,警方通過(guò)查閱死者的電腦和手機(jī)跨晴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)自沧,“玉大人坟奥,你說(shuō)我怎么就攤上這事∧聪幔” “怎么了爱谁?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)孝偎。 經(jīng)常有香客問(wèn)我访敌,道長(zhǎng),這世上最難降的妖魔是什么衣盾? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任寺旺,我火速辦了婚禮,結(jié)果婚禮上势决,老公的妹妹穿的比我還像新娘阻塑。我一直安慰自己,他們只是感情好果复,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布陈莽。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪走搁。 梳的紋絲不亂的頭發(fā)上独柑,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音私植,去河邊找鬼忌栅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛曲稼,可吹牛的內(nèi)容都是我干的索绪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼躯肌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼者春!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起清女,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晰筛,沒(méi)想到半個(gè)月后嫡丙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡读第,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年曙博,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怜瞒。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡父泳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吴汪,到底是詐尸還是另有隱情惠窄,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布漾橙,位于F島的核電站杆融,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏霜运。R本人自食惡果不足惜脾歇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淘捡。 院中可真熱鬧藕各,春花似錦、人聲如沸焦除。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至誉碴,卻和暖如春宦棺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背黔帕。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工代咸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人成黄。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓呐芥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親奋岁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子思瘟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容