流程控制
目錄:
順序結(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 程序 及 運(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("不及格");
? ? ? ? }
??? }
}
以下是一個(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;
? ?? ?? }
??? }
}
循環(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++);
??????? }
??? }
}
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++);
??? }
}
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);
}
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
}
循環(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)的關(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("----------------");
? ? ? ? }
??? }
}
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)的最后一行");
????? ? ? ? }
??? }
}
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é)束輸出
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 次
? ? }
} ? ?
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è)值
??? }
}
練習(xí):
在控制臺(tái)用 * 打印大小可控制的圓。
以上,未完
寫(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)到膩了那~
打道回府,感冒好煩~
???