Java流程控制 (分支與循環(huán))

流程控制

目錄:

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

分支

循環(huán)

循環(huán)嵌套

控制循環(huán)的關(guān)鍵詞

總會(huì)出現(xiàn)一種場(chǎng)景:要滿(mǎn)足某個(gè)條件時(shí),才去做一件事情。 ? ? ? ? ? ? ?? ???????? —分支

也有另外一種場(chǎng)景:重復(fù)做一個(gè)事情,直到滿(mǎn)足某個(gè)條件才會(huì)停下來(lái)。? ???? —循環(huán)

編程就是把一些人類(lèi)不愿意干、干起來(lái)很乏味的事情,告訴計(jì)算機(jī)去做

流程控制一共有 3 種結(jié)構(gòu):

??? A.? 順序結(jié)構(gòu)。如果沒(méi)有流程控制,計(jì)算機(jī)總是從上到下,依次執(zhí)行每一行。

??? B.? 分支。滿(mǎn)足某個(gè)條件時(shí),才去執(zhí)行代碼。

??? C.? 循環(huán)。重復(fù)一段代碼。

分支:if? 、 switch

??????? if 語(yǔ)句

3 種語(yǔ)法:

??????? 第一種語(yǔ)法格式:

??????? if(? 返回 boolean 的表達(dá)式)

??????? {

?????????????? // 要做的事情

??????? }

? ? ? ? 第二種語(yǔ)法格式:

??????? if(? 返回 boolean 的表達(dá)式)

??????? {

??????? // 要做的事情

??????? }

??????? else

??????? {

??????? // 要做的事情

? ? ? ? }
? ? ? ? 第三種語(yǔ)法格式:

??????? if (? 返回 boolean 的表達(dá)式)

??????? {

??????? // 要做的事情

??????? }

? ? ? ? else if (? 返回 boolean 的表達(dá)式)????? // else if 可出現(xiàn) 0~N 次

??????? {

??????? }

? ? ? ? else? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? // else? 可出現(xiàn) 0~1 次

??????? {

??????? // 要做的事情

??????? }

2 個(gè)注意點(diǎn):

??????? A.??? 如果條件執(zhí)行體只有一行代碼,Java 允許省略條件執(zhí)行體的花括號(hào)。

?????????????? 規(guī)則:如果省略了花括號(hào),if 條件只控制到第一個(gè)分號(hào)(;)前面

?????????????? 建議:即使條件執(zhí)行體只有一行代碼,也包括花括號(hào)。

??????? B.??? else 本身就是條件

?????????????? 當(dāng)我們有多個(gè) else if 塊時(shí),

?????????????? 建議:先處理范圍小的條件。

???????? switch語(yǔ)句

當(dāng)?shù)扔谀硞€(gè)值時(shí),才執(zhí)行一段代碼

??????? 只有在 JDK 7 里,表達(dá)式的值才能 String

??????? switch( 返回值是 byte 、short、char、int 或 String 或 枚舉的表達(dá)式)

??????? {

????????????? case 值 1:???????????????????????? // case 塊可以出現(xiàn) 1~N 次

?????????????????????? // 要做的事情

????????????????????? break;

????????????? case 值 2:? ? ? ? ? ? ? ? ? ? ?

???????????? ? ? ? ? ? // 要做的事情

??????????? ? ? ? ? ?? break;

? ? ? ? ? ? ? case 值 3:

??????????? ?????? ? ? // 要做的事情

? ? ? ? ?? ???????? ?? break;

????????????? default:??? // 當(dāng)表達(dá)式的值與前面所有 case 塊的值都不相等時(shí),才會(huì)執(zhí)行。

?????????????????????? // 要做的事情

???? ? ? }

注意點(diǎn):? 省略 break 后的注意點(diǎn)?????????????????????????? //? 筆試題 會(huì)考!!!!!!!!!!!!!

??????? 省略 break 后的執(zhí)行流程,拿 switch 表達(dá)式的值,依次與每個(gè) case 塊的值進(jìn)行比較。

??????? 當(dāng)遇到一個(gè)相等的值后,將直接執(zhí)行所有的執(zhí)行性代碼,

????????????????? 在遇到 break 語(yǔ)句之前,不會(huì)與 case 塊的值進(jìn)行比較,而是直接執(zhí)行代碼。

??????? 省略 break 幾乎沒(méi)有太大的價(jià)值。

??????? 建議:每次寫(xiě)了 case 之后,在寫(xiě)其他代碼之前,立即寫(xiě) break

SwitchTest 程序 及 運(yùn)行結(jié)果:

public class SwitchTest

{

??? public static void main(String[] args)

??? {

??????? char score = 'B';

??????? switch (score)

?? ? ?? {

?? ? ?? ??? case 'A':

?? ? ? ? ?? System.out.println("優(yōu)秀");

?????? ? ?? break;

?? ? ?????? case 'B':

? ? ? ????? System.out.println("良好");

? ? ? ????? break;

? ? ? ????? case 'C':

? ? ? ? ? ? System.out.println("中");

? ? ? ? ? ? break;

? ? ? ? ? ? case 'D':

? ? ? ? ? ? System.out.println("及格");

? ? ? ? ? ? break;

? ? ? ? ? ? default:

? ? ? ? ? ? System.out.println("不及格");

? ? ? ? ? ? break;

??????? }

??? }

}

SwitchTest

SwitchTest 程序 及 運(yùn)行結(jié)果:

public class Switch省略break

{

??? public static void main(String[] args)

??? {

?? ? ?? char score = 'B';

? ? ? ? switch (score)

? ?? ?? {

? ? ? ? ? ? case 'A':

? ?? ? ?? ? System.out.println("優(yōu)秀");

? ? ? ? ? ? case 'B':

? ? ?? ? ?? System.out.println("良好");

? ? ?? ? ?? case 'C':

? ? ? ? ? ? System.out.println("中");

? ? ? ?? ?? case 'D':

? ? ?? ? ?? System.out.println("及格");

? ? ? ?? ?? default:

? ? ? ?? ?? System.out.println("不及格");

? ? ? ? }

??? }

}


Switch省略break

以下是一個(gè)小例子:

活動(dòng)安排,內(nèi)有自動(dòng)獲取系統(tǒng)時(shí)間并提取周幾,然后根據(jù)設(shè)置的周幾輸出要做的事情,可以修改系統(tǒng)時(shí)間來(lái)輸出不同的活動(dòng)安排。

ActionSchedule? 程序 及 運(yùn)行結(jié)果:

import java.util.*;

import java.text.*;

public class ActionSchedule

{

??? public static void main(String[] args)

??? {

? ? ? ? // 獲取系統(tǒng)當(dāng)前時(shí)間

?? ? ?? Date date = new Date();

? ? ? ? // System.out.println(date); // 顯示英文的日期

? ? ? ? // 創(chuàng)建一個(gè) DateFormat 的實(shí)例,DateFormat 的作用是把日期轉(zhuǎn)換成人看的懂的格式的字符串

? ? ? ? DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);

? ? ? ? // System.out.println(df.format(date));? // 顯示出來(lái)年月日? 周幾? 2017年8月2日 星期三

? ? ? ? String str = df.format(date);? // 輸出 2017年8月2日 星期三

? ?? ?? int spacePos = str.indexOf(" "); // 獲取" "在前面字符串中的位置

? ? ? ? // spacePos代表空格的位置,spacePos+1 代表空格后面的字符

? ? ? ? // 截取從空格后面的字符開(kāi)始,直到結(jié)束的字符串

?? ? ?? String day = str.substring(spacePos + 1);

? ?? ?? switch (day)

? ?? ?? {

? ?? ? ? ?? case "星期一":

? ? ? ?? ?? System.out.println("去跑步");

? ? ? ? ? ?? ?? break;

? ? ? ?? ?? case "星期二":

? ? ? ?? ?? System.out.println("王者榮耀找人開(kāi)黑");

? ? ? ? ? ?? ?? break;

? ? ? ?? ?? case "星期三":

? ? ?? ? ?? System.out.println("去找寶貝玩耍");

? ? ? ? ? ?? ?? break;

? ? ? ?? ?? case "星期四":

? ? ? ?? ?? System.out.println("去lol");

? ? ? ? ?? ? ?? break;

? ? ? ?? ?? case "星期五":

? ? ? ?? ?? System.out.println("去購(gòu)物");

? ? ? ? ?? ? ?? break;

? ? ? ?? ?? case "星期六":

? ? ? ?? ?? System.out.println("去健身");

? ? ? ? ? ?? ?? break;

? ? ? ?? ?? case "星期日":

? ? ? ?? ?? System.out.println("睡覺(jué)");

? ? ? ? ? ?? ?? break;

? ?? ?? }

??? }

}


ActionSchedule

循環(huán):while 、do while、for、for each

循環(huán)(loop):回圈

把一段重復(fù)的代碼執(zhí)行多次,直到滿(mǎn)足某個(gè)條件為止。

為了在合適的時(shí)候,停止重復(fù)執(zhí)行,需要讓程序出現(xiàn)滿(mǎn)足停止循環(huán)的條件。

while循環(huán):

while( 返回 boolean 值的表達(dá)式)? // 只要 while 中表達(dá)式為 true,循環(huán)將會(huì)一直執(zhí)行。

{

????? //? 需要重復(fù)做的事情

}

如果循環(huán)體只有一條代碼,可以省略花括號(hào)。

規(guī)則:如果省略了花括號(hào),while 條件只控制到第一個(gè)分號(hào)(;)前面

建議:即使循環(huán)體只有一行代碼,也包括花括號(hào)。

WhileTest 程序 及 運(yùn)行結(jié)果:

public class WhileTest

??? {

??? public static void main(String[] args)

??? {

? ? ? ? int i = 0;

? ?? ?? while(i < 10)

? ?? ?? {

? ? ? ? ? ? System.out.println("i的值為: " + i++);

??????? }

??? }

}

WhileTest

WhileError省略花括號(hào) 程序 及 運(yùn)行結(jié)果:

public class WhileError

{

??? public static void main(String[] args)

??? {

? ? ? ? int i = 0;

? ?? ?? while(i < 10)

? ?? ?? i ++;? //? 先知循環(huán)本條語(yǔ)句,直到 i 為10 時(shí) false,跳出循環(huán),輸出為 10

? ?? ?? System.out.println("i的值為: " + i++);

??? }

}


WhileError

WhileError2 (while 后面有分號(hào) 陷阱) 程序 及 運(yùn)行結(jié)果:

public class WhileError2

{

??? public static void main(String[] args)

??? {

? ? ? ? int i = 0;

? ? ? ? while(i++ < 10); // 同注意分號(hào),但是此時(shí)i可以加到 10,然后false跳出循環(huán)(此時(shí)i為11)到 i++,最后輸出12

? ? ? ? // while(i < 10);? // 注意本句后面的分號(hào),分號(hào)意思本句就結(jié)束,所以這是一個(gè)死循環(huán)

? ?? ?? {

? ?? ? ?? ? i ++;

? ? ? ? ? ? System.out.println("i的值為: " + i);

? ? ? ? }

??? }

}

do while 循環(huán):

do

{

}while ( 返回 boolean 值的表達(dá)式)

??? 這個(gè)與 while 相比,把循環(huán)放在前面。

??? 先執(zhí)行一次循環(huán)體,如果條件為 true ,執(zhí)行下一次循環(huán)

??? 對(duì)于 do while 來(lái)說(shuō),無(wú)論如何,循環(huán)至少會(huì)執(zhí)行一次。

for 循環(huán):

for( 初始化語(yǔ)句 ; 返回 boolean 值的表達(dá)式 ; 每次循環(huán)體執(zhí)行完后執(zhí)行的代碼 )

{

}

? “初始化語(yǔ)句”可以省略。

??????? 如果有“初始化語(yǔ)句”,只有循環(huán)開(kāi)始之前,會(huì)執(zhí)行一次“初始化語(yǔ)句”

??????? 初始化語(yǔ)句可以一次定義多個(gè)變量!

? “返回 boolean 值的表達(dá)式”可以省略。

??????? 如果省略,意味著它的值永遠(yuǎn)是 true

? “每次循環(huán)體執(zhí)行完后執(zhí)行的代碼”可以省略。

? ? ? ? 如果有“每次循環(huán)體執(zhí)行完后執(zhí)行的代碼” ,將在每次循環(huán)體執(zhí)行完成之后,開(kāi)始下一次循環(huán)體之前,執(zhí)行該代碼。

只要兩個(gè)分號(hào)之間的表達(dá)式返回 true ,程序?qū)?zhí)行循環(huán)體。

ForTest? 程序 及 運(yùn)行結(jié)果:

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

{

??? System.out.println("i的值為" + i);

}

ForTest

ForTest2? 程序 及 運(yùn)行結(jié)果:

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

{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // i = (int)(i*0.2)

??? System.out.println("i的值為" + (i *= 0.2));

??? // *=? 強(qiáng)轉(zhuǎn)小數(shù)為整型,所以不可能出現(xiàn)小數(shù),所以結(jié)果一直為0

}

ForTest2

循環(huán)嵌套:

在循環(huán)里面,再放置循環(huán)——就是嵌套循環(huán)

把內(nèi)層循環(huán)當(dāng)成外層循環(huán)的一條語(yǔ)句即可。

循環(huán)嵌套? 程序 及 運(yùn)行結(jié)果:

int i = 0;

while(++i < 10)

{

??? System.out.println("進(jìn)入外層循環(huán)");

??? for(int j = 0;j < 10;j++)

{

??? System.out.println("i的值是" + i + ",j的值是" + j);

}

??? System.out.println("外層循環(huán)的最后一行");

}

循環(huán)嵌套

控制循環(huán)的關(guān)鍵詞:break、continue、return

break? 完全結(jié)束一個(gè)循環(huán)本身。

continue??? 停止當(dāng)前循環(huán)體的執(zhí)行(相當(dāng)于【忽略 continue 后的語(yǔ)句】),開(kāi)始下一次循環(huán)體

????????????????? 如果 continue 位于循環(huán)體的最后一部分,它就是多余的

return??? 結(jié)束整個(gè)方法。? 遇到 return ,方法就會(huì)結(jié)束執(zhí)行。

break 、continue 后可以緊跟標(biāo)號(hào)。

????????????? 帶標(biāo)號(hào)的 break 用于結(jié)束標(biāo)號(hào)所標(biāo)識(shí)的循環(huán)。

? ? ? ? ? ? ? 帶標(biāo)號(hào)的 continue 用于忽略標(biāo)號(hào)所標(biāo)識(shí)的循環(huán)后面剩下的語(yǔ)句。


ContinueTest? 程序 及 運(yùn)行結(jié)果:

public class ContinueTest

{

??? public static void main(String[] args)

??? {

? ? ? ? for(int i = 0;i < 10;i ++)

?? ? ?? {

?? ? ? ?? ? System.out.println("i的值是" + i);

? ?? ? ?? ? if(i > 3)? // 當(dāng) i > 3 時(shí),continue 執(zhí)行,忽略后面的print語(yǔ)句,直接跳到 for

? ? ? ? ? ? {

? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? }

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

? ? ? ? }

??? }

}

ContinueTest

ReturnTest? 程序 及 運(yùn)行結(jié)果:

public class ReturnTest

{

??? public static void main(String[] args)

??? {

? ? ? ? int i = 0;

? ?? ?? while(++i < 10)

? ?? ?? {

? ?? ?????? System.out.println("進(jìn)入外層循環(huán)");

? ?? ? ? ?? for(int j = 0;j < 10;j++)

? ?? ? ? ?? {

? ? ?? ? ?????? for(int k = 0;k < 20;k++)

?? ? ? ? ? ? ?? {

?? ? ? ? ? ?? ? ? ? System.out.println("i的值是" + i

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? + ",j的值是" + j

?? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? + ",k的值是" + k);

? ?? ????? ? ?????? if(k > 3)??? //當(dāng) k > 3 時(shí),執(zhí)行 return ,結(jié)束整個(gè)方法?

? ? ? ? ? ? ? ????? {

? ? ? ? ? ? ? ? ? ? ? ? return;

? ? ? ? ? ??? ? ? ? }

? ? ? ? ? ? ? ? ? ? }

?? ? ? ? ? ? ?? }

? ? ? ? ?????? System.out.println("外層循環(huán)的最后一行");

????? ? ? ? }

??? }

}

ReturnTest

LabelTest? 程序(帶標(biāo)號(hào)的 break) 及 運(yùn)行結(jié)果:

outer:

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

{

??? for(int j = 0;j < 10;j ++)

??? {

? ? ? ? System.out.println("i的值為" + i + ",j的值為" + j);

? ?? ?? if(j > 3)

? ?? ?? {

? ? ? ? ? ? break outer;//帶標(biāo)號(hào)的循環(huán)用于結(jié)束標(biāo)號(hào)所在循環(huán)的循環(huán)

? ?? ?? }

??? }

}? // 當(dāng) j = 4 時(shí),執(zhí)行? break outer,此時(shí)結(jié)束 標(biāo)號(hào) outer 所在的循環(huán),即結(jié)束輸出


LabelTest

ContinueLabel? 程序(帶標(biāo)號(hào)的 continue) 及 運(yùn)行結(jié)果:

outer:

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

{

??? for(int j = 0;j < 10;j ++)

??? {

??????? System.out.println("i的值為" + i + ",j的值為" + j);

??????? if(j > 3)

?? ? ?? {?

? ? ? ? ? ? continue outer;//帶標(biāo)號(hào)的 continue 用于忽略標(biāo)號(hào)所在循環(huán)的循環(huán)的剩下語(yǔ)句

? ? ? ? }? ? ? ? //? 當(dāng) j = 4時(shí),執(zhí)行 continue outer,忽略標(biāo)號(hào)所在循環(huán)的循環(huán)剩下語(yǔ)句,即忽略后三個(gè)},直接又到了 for(int i = 0;i < 10;i ++)? 循環(huán),最終結(jié)果輸出 50 次

? ? }

} ? ?

ContinueLabel

ContinueLabel2 程序(帶標(biāo)號(hào)的 continue) 及 運(yùn)行結(jié)果:

outer:

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

{

??? for(int j = 0;j < 10;j ++)

??? {

? ? ? ? System.out.println("i的值為" + i + ",j的值為" + j);

? ? ? ? if(i > 3)?? //? 注意,這里與上個(gè)程序的區(qū)別,j 換成 i !!!!!!!

? ?? ?? {

? ?? ? ? ?? continue outer;//帶標(biāo)號(hào)的 continue 用于忽略標(biāo)號(hào)所在循環(huán)的循環(huán)的剩下語(yǔ)句

? ? ? ? }? ? //? i = 4 時(shí),輸出 40 后判斷 i>3,則忽略標(biāo)號(hào)所在循環(huán)的循環(huán)的剩下語(yǔ)句,直接跳到 for(int i = 0;i < 10;i ++) 循環(huán),i 加一 為 5 > 3, 以此類(lèi)推,后面值輸出?? 40,50,60,70,80,90? 共輸出 46 個(gè)值

??? }

}


ContinueLabel2

練習(xí):

在控制臺(tái)用 * 打印大小可控制的圓。

點(diǎn)我跳轉(zhuǎn)打印圓 ? ?



以上,未完


寫(xiě)在最后:

總結(jié)一下互聯(lián)網(wǎng)行業(yè)的一些縮寫(xiě),昨天 FE 小哥哥問(wèn)我,你知道 FE 是啥嗎,氣氛一度迷之尷尬……

PM:(project manager)現(xiàn)一般指的都是產(chǎn)品經(jīng)理

RD:(Research and Development)研發(fā)

如:軟件RD工程師就是軟件研發(fā)工程師,諸如php程序猿,Java程序猿,無(wú)論是愛(ài)瘋的還是安卓的都是屬于這一類(lèi)別。偏向于后端的技術(shù)實(shí)現(xiàn)。

FE:(Front-End)前端,前端開(kāi)發(fā)(Front-End?Development)

FE是web前端研發(fā)、前端開(kāi)發(fā)的意思!前端工程師基于需求根據(jù)視覺(jué)設(shè)計(jì)稿、交互設(shè)計(jì)稿,實(shí)現(xiàn)前端界面顯示及交互行為的過(guò)程。

UE:(User Experience,簡(jiǎn)稱(chēng)UX或 UE)用戶(hù)體驗(yàn)

UI:? (User Interface)用戶(hù)界面。UI設(shè)計(jì)則是指對(duì)軟件的人機(jī)交互、操作邏輯、界面美觀的整體設(shè)計(jì)。

QA: (QUALITY?ASSURANCE,中文意思是“質(zhì)量保證”)測(cè)試

OP:(Operations)運(yùn)維

DBA:(Database Administrator,簡(jiǎn)稱(chēng)DBA)數(shù)據(jù)庫(kù)管理員

DB:既數(shù)據(jù)庫(kù)(Database)。


今天周三,想想都一周了啊,時(shí)間過(guò)的真的快啊,馬上要周六了哈哈,就又能見(jiàn)到膩了那~

打道回府,感冒好煩~




???

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔...
    葉總韓閱讀 5,165評(píng)論 0 41
  • Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子...
    趙宇_阿特奇閱讀 1,909評(píng)論 0 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,765評(píng)論 18 399
  • 一、 1、請(qǐng)用Java寫(xiě)一個(gè)冒泡排序方法 【參考答案】 public static void Bubble(int...
    獨(dú)云閱讀 1,412評(píng)論 0 6
  • 楔子 看著手中粉紅色還帶著斑點(diǎn)的‘眼罩’,我有些狐疑的問(wèn)道,“你確定這是你們公司研發(fā)了十年的‘一日?qǐng)A夢(mèng)’?這種東西...
    公子伊洛閱讀 424評(píng)論 1 1