流程控制
目錄:
順序結(jié)構(gòu)
分支
循環(huán)
循環(huán)嵌套
控制循環(huán)的關(guān)鍵詞
總會出現(xiàn)一種場景:要滿足某個條件時驰凛,才去做一件事情。 ? ? ? ? ? ? ?? ???????? —分支
也有另外一種場景:重復(fù)做一個事情株灸,直到滿足某個條件才會停下來。? ???? —循環(huán)
編程就是把一些人類不愿意干考杉、干起來很乏味的事情影兽,告訴計算機去做
流程控制一共有 3 種結(jié)構(gòu):
??? A.? 順序結(jié)構(gòu)揭斧。如果沒有流程控制,計算機總是從上到下峻堰,依次執(zhí)行每一行讹开。
??? B.? 分支。滿足某個條件時捐名,才去執(zhí)行代碼旦万。
??? C.? 循環(huán)。重復(fù)一段代碼镶蹋。
分支:if? 成艘、 switch
??????? if 語句
3 種語法:
??????? 第一種語法格式:
??????? if(? 返回 boolean 的表達式)
??????? {
?????????????? // 要做的事情
??????? }
? ? ? ? 第二種語法格式:
??????? if(? 返回 boolean 的表達式)
??????? {
??????? // 要做的事情
??????? }
??????? else
??????? {
??????? // 要做的事情
? ? ? ? }
? ? ? ? 第三種語法格式:
??????? if (? 返回 boolean 的表達式)
??????? {
??????? // 要做的事情
??????? }
? ? ? ? else if (? 返回 boolean 的表達式)????? // 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 里剑勾,表達式的值才能 String
??????? switch( 返回值是 byte 、short赵颅、char虽另、int 或 String 或 枚舉的表達式)
??????? {
????????????? case 值 1:???????????????????????? // case 塊可以出現(xiàn) 1~N 次
?????????????????????? // 要做的事情
????????????????????? break;
????????????? case 值 2:? ? ? ? ? ? ? ? ? ? ?
???????????? ? ? ? ? ? // 要做的事情
??????????? ? ? ? ? ?? break性含;
? ? ? ? ? ? ? case 值 3:
??????????? ?????? ? ? // 要做的事情
? ? ? ? ?? ???????? ?? break洲赵;
????????????? default:??? // 當(dāng)表達式的值與前面所有 case 塊的值都不相等時,才會執(zhí)行。
?????????????????????? // 要做的事情
???? ? ? }
注意點:? 省略 break 后的注意點?????????????????????????? //? 筆試題 會考5肌Vシⅰ!?凉取8ňā!8沟睢6楞病!B辔尽?坛础!自沧!
??????? 省略 break 后的執(zhí)行流程坟奥,拿 switch 表達式的值,依次與每個 case 塊的值進行比較拇厢。
??????? 當(dāng)遇到一個相等的值后爱谁,將直接執(zhí)行所有的執(zhí)行性代碼,
????????????????? 在遇到 break 語句之前孝偎,不會與 case 塊的值進行比較访敌,而是直接執(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 值的表達式)? // 只要 while 中表達式為 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 值的表達式)
??? 這個與 while 相比,把循環(huán)放在前面尘吗。
??? 先執(zhí)行一次循環(huán)體,如果條件為 true 浇坐,執(zhí)行下一次循環(huán)
??? 對于 do while 來說睬捶,無論如何,循環(huán)至少會執(zhí)行一次近刘。
for 循環(huán):
for( 初始化語句 ; 返回 boolean 值的表達式 ; 每次循環(huán)體執(zhí)行完后執(zhí)行的代碼 )
{
}
? “初始化語句”可以省略擒贸。
??????? 如果有“初始化語句”,只有循環(huán)開始之前觉渴,會執(zhí)行一次“初始化語句”
??????? 初始化語句可以一次定義多個變量介劫!
? “返回 boolean 值的表達式”可以省略。
??????? 如果省略案淋,意味著它的值永遠是 true
? “每次循環(huán)體執(zhí)行完后執(zhí)行的代碼”可以省略座韵。
? ? ? ? 如果有“每次循環(huán)體執(zhí)行完后執(zhí)行的代碼” ,將在每次循環(huán)體執(zhí)行完成之后踢京,開始下一次循環(huán)體之前誉碴,執(zhí)行該代碼。
只要兩個分號之間的表達式返回 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));
??? // *=? 強轉(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("進入外層循環(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("進入外層循環(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 !Q菔臁1拗础!C⒋狻2隙!
? ?? ?? {
? ?? ? ? ?? 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è)計則是指對軟件的人機交互滤蝠、操作邏輯豌熄、界面美觀的整體設(shè)計。
QA: (QUALITY?ASSURANCE物咳,中文意思是“質(zhì)量保證”)測試
OP:(Operations)運維
DBA:(Database Administrator房轿,簡稱DBA)數(shù)據(jù)庫管理員
DB:既數(shù)據(jù)庫(Database)。
今天周三所森,想想都一周了啊,時間過的真的快啊夯接,馬上要周六了哈哈焕济,就又能見到膩了那~
打道回府,感冒好煩~
???