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

流程控制

目錄:

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

分支

循環(huán)

循環(huán)嵌套

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

總會出現(xiàn)一種場景:要滿足某個條件時,才去做一件事情。 ? ? ? ? ? ? ?? ???????? —分支

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

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

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

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

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

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

分支:if? 、 switch

??????? if 語句

3 種語法:

??????? 第一種語法格式:

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

??????? {

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

??????? }

? ? ? ? 第二種語法格式:

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

??????? {

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

??????? }

??????? else

??????? {

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

? ? ? ? }
? ? ? ? 第三種語法格式:

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

??????? {

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

??????? }

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

??????? {

??????? }

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

??????? {

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

??????? }

2 個注意點:

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

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

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

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

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

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

???????? switch語句

當(dāng)?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 塊的值都不相等時,才會執(zhí)行。

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

???? ? ? }

注意點:? 省略 break 后的注意點?????????????????????????? //? 筆試題 會考!?。。。。。。。。。。?!

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

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

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

??????? 省略 break 幾乎沒有太大的價值。

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

SwitchTest 程序 及 運行結(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 程序 及 運行結(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

以下是一個小例子:

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

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

import java.util.*;

import java.text.*;

public class ActionSchedule

{

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

??? {

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

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

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

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

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

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

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

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

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

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

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

? ?? ?? switch (day)

? ?? ?? {

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

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

? ? ? ? ? ?? ?? break;

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

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

? ? ? ? ? ?? ?? break;

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

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

? ? ? ? ? ?? ?? break;

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

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

? ? ? ? ?? ? ?? break;

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

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

? ? ? ? ?? ? ?? break;

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

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

? ? ? ? ? ?? ?? break;

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

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

? ? ? ? ? ?? ?? break;

? ?? ?? }

??? }

}


ActionSchedule

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

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

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

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

while循環(huán):

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

{

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

}

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

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

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

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

public class WhileTest

??? {

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

??? {

? ? ? ? int i = 0;

? ?? ?? while(i < 10)

? ?? ?? {

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

??????? }

??? }

}

WhileTest

WhileError省略花括號 程序 及 運行結(jié)果:

public class WhileError

{

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

??? {

? ? ? ? int i = 0;

? ?? ?? while(i < 10)

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

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

??? }

}


WhileError

WhileError2 (while 后面有分號 陷阱) 程序 及 運行結(jié)果:

public class WhileError2

{

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

??? {

? ? ? ? int i = 0;

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

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

? ?? ?? {

? ?? ? ?? ? i ++;

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

? ? ? ? }

??? }

}

do while 循環(huán):

do

{

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

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

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

??? 對于 do while 來說,無論如何,循環(huán)至少會執(zhí)行一次。

for 循環(huán):

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

{

}

? “初始化語句”可以省略。

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

??????? 初始化語句可以一次定義多個變量!

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

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

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

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

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

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

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

{

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

}

ForTest

ForTest2? 程序 及 運行結(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)的一條語句即可。

循環(huá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é)束一個循環(huán)本身。

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

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

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

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

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

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


ContinueTest? 程序 及 運行結(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 時,continue 執(zhí)行,忽略后面的print語句,直接跳到 for

? ? ? ? ? ? {

? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? }

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

? ? ? ? }

??? }

}

ContinueTest

ReturnTest? 程序 及 運行結(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 時,執(zhí)行 return ,結(jié)束整個方法?

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

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

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

? ? ? ? ? ? ? ? ? ? }

?? ? ? ? ? ? ?? }

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

????? ? ? ? }

??? }

}

ReturnTest

LabelTest? 程序(帶標(biāo)號的 break) 及 運行結(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)號的循環(huán)用于結(jié)束標(biāo)號所在循環(huán)的循環(huán)

? ?? ?? }

??? }

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


LabelTest

ContinueLabel? 程序(帶標(biāo)號的 continue) 及 運行結(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)號的 continue 用于忽略標(biāo)號所在循環(huán)的循環(huán)的剩下語句

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

? ? }

} ? ?

ContinueLabel

ContinueLabel2 程序(帶標(biāo)號的 continue) 及 運行結(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)?? //? 注意,這里與上個程序的區(qū)別,j 換成 i ?。。。。。?!

? ?? ?? {

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

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

??? }

}


ContinueLabel2

練習(xí):

在控制臺用 * 打印大小可控制的圓。

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



以上,未完


寫在最后:

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

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

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

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

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

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

UE:(User Experience,簡稱UX或 UE)用戶體驗

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

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

OP:(Operations)運維

DBA:(Database Administrator,簡稱DBA)數(shù)據(jù)庫管理員

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


今天周三,想想都一周了啊,時間過的真的快啊,馬上要周六了哈哈,就又能見到膩了那~

打道回府,感冒好煩~




???

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容