3.2-全棧Java筆記:Java控制語(yǔ)句(中)循環(huán)結(jié)構(gòu)篇

循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)分兩大類瞒御,一類是當(dāng)型,一類是直到型神郊。

當(dāng)型:當(dāng)布爾表達(dá)式條件為true時(shí)肴裙,反復(fù)執(zhí)行某語(yǔ)句趾唱,直到布爾表達(dá)式的值為false時(shí)才停止循環(huán)。

直到型:先執(zhí)行某語(yǔ)句蜻懦,再判斷布爾表達(dá)式甜癞,如果為true,再執(zhí)行某語(yǔ)句宛乃,如此反復(fù)悠咱,直到布爾表達(dá)式條件為false時(shí)才停止循環(huán)。

while循環(huán)

語(yǔ)法結(jié)構(gòu):

while (布爾表達(dá)式) {

循環(huán)體;

}

圖1while流程圖

在循環(huán)剛開(kāi)始時(shí)征炼,會(huì)計(jì)算一次“布爾表達(dá)式”的值析既,若條件為真,執(zhí)行循環(huán)體谆奥。而對(duì)于后來(lái)每一次額外的循環(huán)眼坏,都會(huì)在開(kāi)始前重新計(jì)算一次。

語(yǔ)句中應(yīng)有使循環(huán)趨向于結(jié)束的語(yǔ)句雄右,否則會(huì)出現(xiàn)無(wú)限循環(huán)–––"死"循環(huán)空骚。

【示例1while結(jié)構(gòu)1100之間的累加和

public class WhileTest {

public static void main(String[] args) {

int? i = 0;

int? sum = 0;

while (i <= 100) {?? // 1+2+3+…+100=?

sum += i;?? //sum = sum+i;

i++;

}

System.out.println("Sum= " + sum);

}

}

示例1運(yùn)行效果圖

do-while循環(huán)

語(yǔ)法結(jié)構(gòu):

do {

循環(huán)體;

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

圖2 do-while流程圖

先執(zhí)行循環(huán)體,然后判斷布爾表達(dá)式擂仍,do-while循環(huán)循環(huán)體至少執(zhí)行一次囤屹。

【示例21-100之間的累加和

public class Test {

public static void main(String[] args) {

int i = 0;

int sum = 0;

do {

sum += i; // sum = sum + i

i++;

} while (i <= 100);

System.out.println("Sum= " + sum);

}

}

示例2運(yùn)行效果圖

【示例3whiledo-while的區(qū)別

public class Test {

public static void main(String[] args) {

int a = 0;

while(a<0){

System.out.println(a);

a++;

}

System.out.println("-----");

a=0;

do{

System.out.println(a);

a++;

} while (a<0);

}

}

示例3運(yùn)行效果圖

for循環(huán)

語(yǔ)法結(jié)構(gòu):

for (初始表達(dá)式;布爾表達(dá)式;迭代因子) {

循環(huán)體;

}

圖3 or循環(huán)流程圖

for循環(huán)語(yǔ)句是支持迭代的一種通用結(jié)構(gòu),是最有效逢渔、最靈活的循環(huán)結(jié)構(gòu)肋坚。for循環(huán)在第一次反復(fù)之前要進(jìn)行初始化形纺。隨后众眨,它會(huì)進(jìn)行條件測(cè)試,而且在每一次反復(fù)的時(shí)候妻坝,進(jìn)行某種形式的“步進(jìn)”盲赊。

初始化部分設(shè)置循環(huán)變量的初值

條件判斷部分為任意布爾表達(dá)式

迭代因子控制循環(huán)變量的增減

for循環(huán)在執(zhí)行條件測(cè)試后铣鹏,先執(zhí)行程序部分,再執(zhí)行步進(jìn)哀蘑。

【示例4for循環(huán)舉例

public class ForTest {

public static void main(String args[]) {

int sum = 0;

for (int i = 0; i <= 100; i++) {

sum += i;

}

System.out.println("Sum= " + sum);

for(int i=9;i>0;i--){

System.out.print(i+"诚卸、");

}

System.out.println();

for(int i=90;i>0;i-=3){

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

}

System.out.println();

}

}

示例4運(yùn)行效果圖

Java里唯一用到逗號(hào)運(yùn)算符的地方就是for循環(huán)的控制表達(dá)式绘迁。在控制表達(dá)式的初始化和步進(jìn)控制部分合溺,我們可以使用一系列由逗號(hào)分隔的表達(dá)式。而且那些表達(dá)式均會(huì)獨(dú)立執(zhí)行缀台。

【示例5】逗號(hào)運(yùn)算符

public class ForTest {

public static void main(String[] args) {

for(int? i = 1, ?j = i + 10;?? i < 5;? i++, j = i * 2) {

System.out.println("i= " + i + " j= " + j);

}

}

}

示例5運(yùn)行效果圖

無(wú)論在初始化還是在步進(jìn)部分棠赛,語(yǔ)句都是順序執(zhí)行的。

盡管初始化部分可設(shè)置任意數(shù)量的定義,但都屬于同一類型睛约。

約定:只在for語(yǔ)句的控制表達(dá)式中寫(xiě)入進(jìn)行初始化鼎俘,測(cè)試和修改同一計(jì)數(shù)器變量的表達(dá)式。

初始化部分痰腮、條件判斷部分和迭代因子可以為空語(yǔ)句而芥,但以“;”分開(kāi),如示例6所示膀值。

【示例6】無(wú)限循環(huán)

public class ForTest {

public static void main(String[] args) {

for ( ; ; ) {??? //無(wú)限循環(huán)while(true)

System.out.println("北京");

}

}

}

編譯器將while(true)與for(;;)看作同一回事,都指的是無(wú)限循環(huán)误辑。

在for語(yǔ)句的初始化部分聲明的變量沧踏,其作用域?yàn)檎麄€(gè)for循環(huán)體,如示例7所示巾钉。

【示例7】初始化變量的作用域

public class ForTest {

public static void main(String[] args) {

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

System.out.println(i+"翘狱、");

}// i no longer defined here

System.out.println(i);

}

}

示例7運(yùn)行效果圖

嵌套循環(huán)

在一個(gè)循環(huán)語(yǔ)句內(nèi)部再嵌套一循環(huán)或多個(gè)循環(huán),稱為嵌套循環(huán)砰苍。while潦匈、do-while與for循環(huán)可以任意嵌套多層。

【示例8】嵌套循環(huán)

public class LoopForTest {

public static void main(String args[]) {

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

for(int j=1; j<=5; j++){

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

}

System.out.println();

}

}

}

示例8運(yùn)行效果圖

【示例9】使用嵌套循環(huán)實(shí)現(xiàn)九九乘法表

public class LoopForTest {

public static void main(String args[]) {

for (int i = 1; i < 10; i++) {? //i是一個(gè)乘數(shù)

for (int j = 1; j <= i; j++) {? //j是另一個(gè)乘數(shù)

System.out.print(j + "*" + i + "=" + (i * j < 10? (" " + i * j):i * j) + "? ");

}

System.out.println();

}

}

}


示例9運(yùn)行效果圖

break語(yǔ)句和continue語(yǔ)句

在任何循環(huán)語(yǔ)句的主體部分赚导,均可用break控制循環(huán)的流程茬缩。break用于強(qiáng)行退出循環(huán),不執(zhí)行循環(huán)中剩余的語(yǔ)句吼旧。

【示例10break語(yǔ)句

public class BreakTest {

public static void main(String[] args) {

int total = 0;

System.out.println("Begin");

while(true) {

total++;

int i = (int)Math.round(100 * Math.random());

if(i == 88) break;

}

System.out.println("Game over, used " + total + " times.");

}

}


示例10?運(yùn)行效果圖

continue語(yǔ)句用在循環(huán)語(yǔ)句體中凰锡,用于終止某次循環(huán)過(guò)程,即跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句圈暗,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定掂为。

注意事項(xiàng)

·continue用在while,do-while中,continue語(yǔ)句立刻跳到循環(huán)首部员串,越過(guò)了當(dāng)前循環(huán)的其余部分勇哗。

·continue用在for循環(huán)中,跳到for循環(huán)的迭代因子部分。

【示例11】把100~150之間不能被3整除的數(shù)輸出

public class ContinueTest {

public static void main(String[] args) {

int count=0;

for (int i = 100; i < 150; i++) {

if (i % 3 == 0)

continue;

count++;

System.out.print(i+"寸齐、");

if(count%5==0){

System.out.println();

}

}

}

}


示例11運(yùn)行效果圖

帶標(biāo)簽的break和continue

goto關(guān)鍵字很早就在程序設(shè)計(jì)語(yǔ)言中出現(xiàn)欲诺。盡管goto仍是Java的一個(gè)保留字,但并未在語(yǔ)言中得到正式使用访忿;Java沒(méi)有g(shù)oto瞧栗。然而,在break和continue這兩個(gè)關(guān)鍵字的身上海铆,我們?nèi)匀荒芸闯鲆恍ゞoto的影子---帶標(biāo)簽的break和continue迹恐。

“標(biāo)簽”是指后面跟一個(gè)冒號(hào)的標(biāo)識(shí)符,例如:“l(fā)abel:”卧斟。對(duì)Java來(lái)說(shuō)唯一用到標(biāo)簽的地方是在循環(huán)語(yǔ)句之前殴边。而在循環(huán)之前設(shè)置標(biāo)簽的唯一理由是:我們希望在其中嵌套另一個(gè)循環(huán)憎茂,由于break和continue關(guān)鍵字通常只中斷當(dāng)前循環(huán),但若隨同標(biāo)簽使用锤岸,它們就會(huì)中斷到存在標(biāo)簽的地方竖幔。

在“Goto有害”論中,最有問(wèn)題的就是標(biāo)簽是偷,而非goto拳氢,隨著標(biāo)簽在一個(gè)程序里數(shù)量的增多,產(chǎn)生錯(cuò)誤的機(jī)會(huì)也越來(lái)越多蛋铆。但馋评,Java標(biāo)簽不會(huì)造成這方面的問(wèn)題,因?yàn)樗鼈兊幕顒?dòng)場(chǎng)所已被限死刺啦,不可通過(guò)特別的方式到處傳遞程序的控制權(quán)留特。由此也引出了一個(gè)有趣的問(wèn)題:通過(guò)限制語(yǔ)句的能力,反而能使一項(xiàng)語(yǔ)言特性更加有用玛瘸。

【示例12帶標(biāo)簽break和continue控制嵌套循環(huán)跳轉(zhuǎn)(打印101-150之間所有的質(zhì)數(shù))

public class PrimeNumber {

public static void main(String args[]) {

intcount = 0;

outer:for(inti = 101; i < 150; i ++) {

for(intj = 2; j < i / 2; j++) {

if(i % j == 0)

continueouter;

}

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

}

}

}

「全棧Java筆記」是一部能幫大家從零到一成長(zhǎng)為全棧Java工程師系列筆記蜕青。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗(yàn)糊渊,曾在神州數(shù)碼右核、航天院某所研發(fā)中心從事軟件設(shè)計(jì)及研發(fā)工作,從小白逐漸做到工程師再来、高級(jí)工程師蒙兰、架構(gòu)師。精通Java平臺(tái)軟件開(kāi)發(fā)芒篷,精通JAVAEE搜变,熟悉各種流行開(kāi)發(fā)框架。

筆記包含從淺入深的六大部分:

A-Java入門(mén)階段

B-數(shù)據(jù)庫(kù)從入門(mén)到精通

C-手刃移動(dòng)前端和Web前端

D-J2EE從了解到實(shí)戰(zhàn)

E-Java高級(jí)框架精解

F-Linux和Hadoop

F-Linux和Hadoop

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末针炉,一起剝皮案震驚了整個(gè)濱河市挠他,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌篡帕,老刑警劉巖殖侵,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異镰烧,居然都是意外死亡拢军,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)怔鳖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)茉唉,“玉大人,你說(shuō)我怎么就攤上這事《嚷剑” “怎么了艾凯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)懂傀。 經(jīng)常有香客問(wèn)我趾诗,道長(zhǎng),這世上最難降的妖魔是什么蹬蚁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任恃泪,我火速辦了婚禮,結(jié)果婚禮上犀斋,老公的妹妹穿的比我還像新娘悟泵。我一直安慰自己,他們只是感情好闪水,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蒙具,像睡著了一般球榆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上禁筏,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天持钉,我揣著相機(jī)與錄音,去河邊找鬼篱昔。 笑死每强,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的州刽。 我是一名探鬼主播空执,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼穗椅!你這毒婦竟也來(lái)了辨绊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤匹表,失蹤者是張志新(化名)和其女友劉穎门坷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體袍镀,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡默蚌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苇羡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绸吸。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惯裕,到底是詐尸還是另有隱情温数,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布蜻势,位于F島的核電站撑刺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏握玛。R本人自食惡果不足惜够傍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挠铲。 院中可真熱鬧冕屯,春花似錦、人聲如沸拂苹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瓢棒。三九已至浴韭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脯宿,已是汗流浹背念颈。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留连霉,地道東北人榴芳。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像跺撼,于是被迫代替她去往敵國(guó)和親窟感。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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