Java基礎教程(9)——流程控制

一.分支結構

1.if語句

if語句會與其后的第一條語句或代碼塊結合,且只有當判斷條件為true時才執(zhí)行語句或代碼塊。例如乳怎,自行車只有在運動的時候才可以減速芹橡,就像下面這樣:

void applyBrakes() {

if (isMoving){

currentSpeed--;

}

}

如果判斷條件為false,也就是自行車處于靜止狀態(tài)時有勾,將會跳過if語句后面的語句或代碼塊疹启。

如果if語句后只有一條需要執(zhí)行的語句,既可以使用大括號蔼卡,也可以不使用皮仁。不過按照慣例來說,任何時候都應該使用大括號菲宴,這樣可以避免有時因為忘記大括號而帶來的一些邏輯錯誤贷祈。for、while語句也是同理喝峦。

2.if-else語句

if語句只是指出了當判斷條件為true時需要執(zhí)行的語句势誊。使用if-else語句可以同時指定當判斷條件為true和false時應該執(zhí)行的語句。當自行車沒有處于運動狀態(tài)時谣蠢,可以簡單地輸出一條信息:

void applyBrakes() {

if (isMoving){

currentSpeed--;

} else {

System.out.println("The bicycle has already stopped!");

}

}

下面的程序根據(jù)分數(shù)來給出對應的等級:

class IfElseDemo {

public static void main(String[] args) {

int testscore = 76;

char grade;

if (testscore >= 90) {

grade = 'A';

} else if (testscore >= 80) {

grade = 'B';

} else if (testscore >= 70) {

grade = 'C';

} else if (testscore >= 60) {

grade = 'D';

} else {

grade = 'F';

}

System.out.println("Grade = " + grade);

}

}

該程序最終的輸出為:

Grade = C

雖然testscore滿足很多條件粟耻,例如76>=70和76>=60等查近,但是,一旦滿足了一個條件挤忙,就會執(zhí)行對應的語句(grade = 'C';)并跳過剩余條件霜威。

3.switch語句

與if和if-else語句不同,switch語句可以有許多可能的執(zhí)行路徑册烈。例如下面的代碼將會使用switch語句根據(jù)month的值來輸出對應的月份:

public class SwitchDemo1 {

public static void main(String[] args) {

int month = 8;

String monthString;

switch (month) {

case 1: monthString = "January";break;

case 2: monthString = "February";break;

case 3: monthString = "March";break;

case 4: monthString = "April";break;

case 5: monthString = "May";break;

case 6: monthString = "June";break;

case 7: monthString = "July";break;

case 8: monthString = "August";break;

case 9: monthString = "September";break;

case 10: monthString = "October";break;

case 11: monthString = "November";break;

case 12: monthString = "December";break;

default: monthString = "Invalid month";break;

}

System.out.println(monthString);

}

}

該程序將會輸出:

August

switch語句的判斷條件是一個變量或表達式戈泼,它的類型可以是byte,short赏僧,char和int以及它們的包裝類(Character大猛,Byte,Short淀零,和Integer)挽绩,還可以是字符串和枚舉類型,case后面是這些類型的字面量驾中。

default語句用來處理當所有case標簽都不滿足的情況唉堪。break語句用來退出switch塊。如果一個case語句最后沒有使用break肩民,將會執(zhí)行下一個case的語句而不進行判斷巨坊,直到遇到break或switch塊結束。下面的例子根據(jù)month的值來輸出季節(jié):

public class SwitchDemo2 {

public static void main(String[] args) {

int month = 5;

switch(month) {

case 2:

case 3:

case 4: System.out.println("Spring");

case 5:

case 6:

case 7: System.out.println("Summer");

case 8:

case 9:

case 10: System.out.println("Autumn");

case 11:

case 12:

case 1: System.out.println("Winter");

}

}

}

該程序將會輸出:

Summer

其實無論month的值是5此改,6還是7趾撵,都會輸出Summer,因為case 5和case 6都沒有break語句共啃,即使匹配到了它們占调,程序也還是會進入case 7。

相信有很多學習java的道友移剪,海量知識分究珊,絕對是Java干貨,等各位的到來纵苛,我們一同從入門到精通吧剿涮!

Java學習交流:【47】974【9726】

二.循環(huán)結構

1.while語句和do-while語句

當判斷條件為true時,while語句將會重復執(zhí)行代碼塊中的內(nèi)容攻人,直到判斷條件為false取试。它的語法如下:

while (expression) {

statement(s)

}

下面的程序使用while循環(huán)打印出1~10:

class WhileDemo {

public static void main(String[] args){

int count = 1;

while (count < 11) {

System.out.println("Count is: " + count);

count++;

}

}

}

可以使用以下while語句實現(xiàn)無限循環(huán):

while (true){

// your code goes here

}

Java也支持do-while循環(huán),語法如下:

do {

statement(s)

} while (expression);

do-while循環(huán)和while循環(huán)之間的區(qū)別在于它在執(zhí)行完代碼塊中的語句之后進行判斷怀吻,而不是在循環(huán)開始前進行判斷瞬浓。也就是說,循環(huán)體中的代碼至少會執(zhí)行一次蓬坡。下面的程序使用do-while循環(huán)打印出1~10:

class DoWhileDemo {

public static void main(String[] args){

int count = 1;

do {

System.out.println("Count is: " + count);

count++;

} while (count < 11);

}

}

2.for循環(huán)

for循環(huán)可以控制循環(huán)的次數(shù)猿棉,它的的語法如下:

for (initialization; condition; increment) {

statement(s)

}

使用for循環(huán)時磅叛,需要注意:

initialization通常用來更初始化計數(shù)器,它只在循環(huán)開始前執(zhí)行一次萨赁。

condition時每一次循環(huán)前要判斷的條件弊琴,一旦條件不滿足,循環(huán)將結束杖爽。

increment用來對計數(shù)器進行更新敲董,它在每次循環(huán)結束后執(zhí)行。

下面的程序使用for循環(huán)打印出1~10:

class ForDemo {

public static void main(String[] args){

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

System.out.println("Count is: " + i);

}

}

}

注意變量i的聲明位置掂林。由于它是在初始化表達式中聲明的臣缀,因此它的范圍和生存周期僅在循環(huán)內(nèi)有效坝橡。一旦循環(huán)結束泻帮,變量i將無法訪問。

for循環(huán)的三個表達式都是可選的计寇,任意一個都可以為空锣杂。下面的語句將會創(chuàng)建一個無限循環(huán):

for ( ; ; ) {

// your code goes here

}

for循環(huán)還有一種用于迭代數(shù)組和集合的格式,稱為增強型for循環(huán)番宁。下面的程序使用增強型for循環(huán)來遍歷數(shù)組:

class EnhancedForDemo {

public static void main(String [] args){

int [] numbers =

{1,2,3,4,5,6,7,8,9,10};

for(int item:numbers){

System.out.println(“Count is:”+ item);

}

}

}

三.中斷控制流

1.break

break語句用于結束當前控制結構元莫,它有兩種形式,帶標簽的break語句和不帶標簽的break語句蝶押。在之前的switch樣例中已經(jīng)見到了不帶標簽的break語句踱蠢。還可以使用不帶標簽的break語句終止for,while或do-while循環(huán)棋电,如下面的BreakDemo程序:

class BreakDemo {

public static void main(String[] args) {

int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 };

int searchfor = 12;

int i;

boolean foundIt = false;

for (i = 0; i < arrayOfInts.length; i++) {

if (arrayOfInts[i] == searchfor) {

foundIt = true;

break;

}

}

if (foundIt) {

System.out.println("Found " + searchfor + " at index " + i);

} else {

System.out.println(searchfor + " not in the array");

}

}

}

該程序的輸出是:

Found 12 at index 4

不帶標簽的break語句跳出最內(nèi)層的循環(huán)或分支結構茎截,但帶標簽的break語句可以跳出標簽對應的那個結構。例如:

class BreakWithLabelDemo {

public static void main(String[] args) {

int[][] arrayOfInts = { { 32, 87, 3, 589 },

{ 12, 1076, 2000, 8 },

{ 622, 127, 77, 955 } };

int searchfor = 12;

int i;

int j = 0;

boolean foundIt = false;

search:

for (i = 0; i < arrayOfInts.length; i++) {

for (j = 0; j < arrayOfInts[i].length;

j++) {

if (arrayOfInts[i][j] == searchfor) {

foundIt = true;

break search;

}

}

}

if (foundIt) {

System.out.println("Found " + searchfor + " at " + i + ", " + j);

} else {

System.out.println(searchfor + " not in the array");

}

}

}

當找到12時赶盔,程序將跳出search對應的for循環(huán)企锌。該程序的輸出是:

Found 12 at 1, 0

2.continue

continue跳到循環(huán)體的末尾,并執(zhí)行循環(huán)條件的判斷于未。下面的程序統(tǒng)計字母p的出現(xiàn)次數(shù)撕攒。如果當前字符不是p,則continue語句將跳過循環(huán)的其余部分并繼續(xù)執(zhí)行下一次循環(huán)烘浦。如果是 “p”抖坪,計數(shù)器會加1:

class ContinueDemo {

public static void main(String[] args) {

String searchMe = "peter piper picked a peck of pickled peppers";

int max = searchMe.length();

int numPs = 0;

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

if (searchMe.charAt(i) != 'p')

continue;

numPs++;

}

System.out.println("Found " + numPs + " p in the string.");

}

}

該程序的輸出是:

Found 9 p in the string.

和break一樣,continue也分為帶標簽的continue語句和不帶標簽的continue語句闷叉。帶標簽的continue語句將會結束當前的循環(huán)并開始下一次標簽對應的循環(huán)柳击。下面的程序使用帶標簽的continue和break語句來判斷一個字符串是否包含另一個字符串:

class ContinueWithLabelDemo {

public static void main(String[] args) {

String searchMe = "Look for a substring in me";

String substring = "sub";

boolean foundIt = false;

int max = searchMe.length() - substring.length();

test:

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

int n = substring.length();

int j = i;

int k = 0;

while (n-- != 0) {

if (searchMe.charAt(j++) != substring.charAt(k++)) {

continue test;

}

}

foundIt = true;

break test;

}

System.out.println(foundIt ? "Found it" : "Didn't find it");

}

}

該程序的輸出是:

Found it

3.return

最后一個可以中斷控制流的語句是return語句,它可以從當前的方法中退出片习。return語句有兩種形式捌肴,使用返回值和不使用返回值蹬叭。如果要返回一個值,只需要將值或表達式放在return關鍵字后面状知。例如:

return ++count;

返回值的數(shù)據(jù)類型必須與方法聲明的返回值的類型匹配秽五。使用沒有返回值的return語句時,方法的返回值類型必須聲明為void饥悴,例如:

return;

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坦喘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子西设,更是在濱河造成了極大的恐慌瓣铣,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贷揽,死亡現(xiàn)場離奇詭異棠笑,居然都是意外死亡,警方通過查閱死者的電腦和手機禽绪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門蓖救,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人印屁,你說我怎么就攤上這事循捺。” “怎么了雄人?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵从橘,是天一觀的道長。 經(jīng)常有香客問我础钠,道長恰力,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任珍坊,我火速辦了婚禮牺勾,結果婚禮上,老公的妹妹穿的比我還像新娘阵漏。我一直安慰自己驻民,他們只是感情好,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布履怯。 她就那樣靜靜地躺著回还,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叹洲。 梳的紋絲不亂的頭發(fā)上柠硕,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機與錄音,去河邊找鬼蝗柔。 笑死闻葵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的癣丧。 我是一名探鬼主播槽畔,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胁编!你這毒婦竟也來了厢钧?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤嬉橙,失蹤者是張志新(化名)和其女友劉穎早直,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體市框,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡霞扬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拾给。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祥得。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡兔沃,死狀恐怖蒋得,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乒疏,我是刑警寧澤额衙,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站怕吴,受9級特大地震影響窍侧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜转绷,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一伟件、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧议经,春花似錦斧账、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至籍救,卻和暖如春习绢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝙昙。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工闪萄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梧却,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓败去,卻偏偏與公主長得像篮幢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子为迈,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

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

  • 【程序1】 題目:古典問題:有一對兔子三椿,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔...
    開心的鑼鼓閱讀 3,318評論 0 9
  • 【程序1】 題目:古典問題:有一對兔子葫辐,從出生后第3個月起每個月都生一對兔子搜锰,小兔子長到第三個月后每個月又生一...
    阿里高級軟件架構師閱讀 3,286評論 0 19
  • Java經(jīng)典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子耿战,小兔子...
    趙宇_阿特奇閱讀 1,860評論 0 2
  • process對象是Node.js中非常重要的一個全局對象蛋叼,它是一個與操作系統(tǒng)集成的對象,使用process我們可...
    海因斯坦閱讀 1,252評論 0 0
  • 寫這個的靈感是前天聽了個關于演講的語音,主題是“演講沒有東西可講鸭栖,怎么破歌馍?”。其中一條是做好知識管理晕鹊,平時多收集故...
    肖大懶人閱讀 480評論 3 6