流程控制
目錄:
順序結(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 程序 及 運行結(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("不及格");
? ? ? ? }
??? }
}

以下是一個小例子:
活動安排,內(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;
? ?? ?? }
??? }
}

循環(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++);
??????? }
??? }
}

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++);
??? }
}

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);
}

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
}

循環(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)的關(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("----------------");
? ? ? ? }
??? }
}

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)的最后一行");
????? ? ? ? }
??? }
}

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é)束輸出

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 次
? ? }
} ? ?

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 個值
??? }
}

練習(xí):
在控制臺用 * 打印大小可控制的圓。
以上,未完
寫在最后:
總結(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)。
今天周三,想想都一周了啊,時間過的真的快啊,馬上要周六了哈哈,就又能見到膩了那~
打道回府,感冒好煩~
???