Java流程控制
本章一起來(lái)探討下Java的流程控制語(yǔ)句昂芜。主要從以下幾個(gè)方面展開(kāi):
- Java分支語(yǔ)句
- Java循環(huán)語(yǔ)句
Java其實(shí)和其他任何的開(kāi)發(fā)語(yǔ)言一樣洲尊,<u>分支語(yǔ)句</u>和<u>循環(huán)語(yǔ)句</u>是必不可少的澎语,有個(gè)這兩個(gè)功能之后蜗顽,我們完成類似:
- 判斷成績(jī)等級(jí)坑匠,優(yōu)秀或者良好
- 完成九九乘法表等相關(guān)的操作
一血崭、分支語(yǔ)句
1.1 分支語(yǔ)句簡(jiǎn)介
- 分支語(yǔ)句根據(jù)一定的條件有選擇地執(zhí)行或跳過(guò)特定的語(yǔ)句
- 從而來(lái)完成根據(jù)不同的條件,得到不同的結(jié)果厘灼,來(lái)滿足現(xiàn)實(shí)生活中的需求
- Java中提供了多種實(shí)現(xiàn)分支語(yǔ)句的方式
- 1)
if
: 單分支語(yǔ)句夹纫,如果滿足進(jìn)入該語(yǔ)句塊 - 2)
if...else
: 如果滿足進(jìn)入該if語(yǔ)句塊,否則進(jìn)入else語(yǔ)句塊,二選一 - 3)
if...else if...else if...else
:多分支語(yǔ)句设凹,條件滿足進(jìn)入一個(gè)分支舰讹,如果都不滿足進(jìn)入 else - 4)
switch...case
: 實(shí)現(xiàn)語(yǔ)句塊
- 1)
1.2 if單分支語(yǔ)句
if
單分支語(yǔ)句,表示只要條件滿足闪朱,就會(huì)進(jìn)入語(yǔ)句塊內(nèi)容月匣,否則直接跳過(guò)。
上圖左側(cè)部分就是表示if
單分支語(yǔ)句
//語(yǔ)法
if(條件表達(dá)式){
//如果條件為true奋姿,執(zhí)行到該語(yǔ)句锄开。否則跳過(guò)該語(yǔ)句
}
案例:
如果成績(jī)score大于等于90,將grade等級(jí)設(shè)置有優(yōu)秀
称诗,否則忽略
public static void main(String[] args) {
int score = 91;
String grade = "";
if(score>=90) {
grade = "優(yōu)秀";
System.out.println("小明獲得雞腿一只");
}
System.out.println("end...");
}
注意:以后代碼過(guò)程中萍悴,注意測(cè)試。否則條件特別容易被漏掉
1.3 if...else雙分支語(yǔ)句
if...else
稱為雙分支語(yǔ)句寓免,如果條件滿足則進(jìn)入if
語(yǔ)句塊退腥,否則進(jìn)入else
語(yǔ)句塊;
也就是說(shuō)if
或else
語(yǔ)句塊必須會(huì)進(jìn)入其中的一個(gè)分支再榄;同時(shí)也不存在兩個(gè)分支同時(shí)進(jìn)入狡刘;
如上圖右側(cè),就是if...else
的使用場(chǎng)景
語(yǔ)法:
// 格式 雙分支語(yǔ)句 if 或者else 永遠(yuǎn)進(jìn)入一個(gè)分支
if(條件){
//條件為真困鸥,進(jìn)入
}else{
//否則進(jìn)入else
}
案例:
如果小明成績(jī)不低于90分嗅蔬,獎(jiǎng)勵(lì)一只雞腿剑按,否則只能吃青菜
public static void main(String[] args) {
int score = 89;
//注意:以后代碼過(guò)程中,注意測(cè)試澜术。否則條件特別容易被漏掉
if(score>=90) {
System.out.println("小明獲得雞腿一只");
}else {
System.out.println("小明被罰只能吃青菜");
}
System.out.println("end...");
}
1.4 if...else if...else語(yǔ)法
if...else if...else
也被稱為多分支語(yǔ)句艺蝴,可以指定多個(gè)條件。
但是能夠進(jìn)入分支的只有一個(gè)
語(yǔ)法:
//語(yǔ)法
if(條件){
//滿足進(jìn)入
}else if(條件2){
//滿足進(jìn)入
}else if(條件3){
//滿足進(jìn)入
}else{
//都不滿足鸟废,進(jìn)入else
}
案例:
不同的條件進(jìn)入不同的分支猜敢,例如:成績(jī)?yōu)?8,獎(jiǎng)勵(lì)麻辣雞爪一個(gè)
public static void main(String[] args) {
int score = 50;
// 注意:以后代碼過(guò)程中盒延,注意測(cè)試缩擂。否則條件特別容易被漏掉
if (score >= 90) {
System.out.println("小明獲得雞腿一只");
} else if (score >= 80) {
System.out.println("麻辣雞爪一個(gè)!");
} else if (score >= 60) {
System.out.println("獎(jiǎng)勵(lì)練習(xí)題一打!");
} else {
System.out.println("小明被暴打了一頓");
}
System.out.println("end...");
}
注意:如果多個(gè)條件同時(shí)滿足添寺,那么會(huì)從上而下胯盯,自動(dòng)匹配。當(dāng)進(jìn)入一個(gè)分支之后计露,就不會(huì)在進(jìn)入其他分支博脑。
1.5 switch...case語(yǔ)句
在處理多個(gè)選項(xiàng)的時(shí)候,除了可以使用if...else
票罐,Java還提供了另外一種分支語(yǔ)句叉趣,那就是switch...case
switch
語(yǔ)句將從選項(xiàng)值相匹配的case
標(biāo)簽處開(kāi)始執(zhí)行,知道語(yǔ)句結(jié)束或者遇到break
關(guān)鍵字
語(yǔ)法結(jié)構(gòu):
- switch(表達(dá)式)中表達(dá)式的返回值必須是下述幾種類型之一:
int
,byte
,char
,short
,枚舉
,字符串
- case子句中的值必須是
常量
该押,且所有case子句中的值應(yīng)是不同的疗杉; - default子句是最終執(zhí)行
-
break
語(yǔ)句用來(lái)在執(zhí)行完一個(gè)case分支后使程序跳出switch語(yǔ)句塊;
// 給固定的內(nèi)容
switch(表達(dá)式){
case 常量1:
//語(yǔ)句塊
break;
case 常量1:
//語(yǔ)句塊
break;
case 常量1:
//語(yǔ)句塊
break;
default:
//語(yǔ)句塊:類似else
}
案例:
根據(jù)不同的值沈善,獲取不同的級(jí)別
public static void main(String[] args) {
int top = 1;
switch (top) {
case 1:
System.out.println("恭喜總冠軍!!");
break;
case 2:
System.out.println("恭喜亞軍!!");
break;
case 3:
System.out.println("恭喜季軍!!");
break;
case 4:
System.out.println("恭喜第四!!");
break;
case 5:
System.out.println("恭喜第五!!");
break;
default:
System.out.println("墊底");
}
}
注意:
①表達(dá)式的值如果和常量的內(nèi)容保持一致乡数,表示會(huì)進(jìn)入該代碼塊
②break,跳出當(dāng)前的語(yǔ)句快,否則會(huì)一直往下執(zhí)行
二闻牡、循環(huán)語(yǔ)句
2.1 循環(huán)語(yǔ)句簡(jiǎn)介
在滿足指定條件下净赴,反復(fù)執(zhí)行特定的代碼。
例如:將1-100
之間的和進(jìn)行累加罩润;
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum = sum+i;
}
System.out.println("sum=" + sum);
}
Java中提供了三種基本的循環(huán):
- for循環(huán)
- 1)普通for循環(huán)
- 2)增強(qiáng)for循環(huán)
- while
- do...while
2.2 for循環(huán)
for
循環(huán)語(yǔ)句是支持迭代的一種通用結(jié)構(gòu)玖翅, 利用每次迭代之后更新的計(jì)數(shù)器或類似的變量來(lái)控制迭代次數(shù)
for
一般用來(lái)明確循環(huán)次數(shù)的情況使用,更加的方便
1割以、循環(huán)組成部分:
a.初始化
b.循環(huán)條件
c.循環(huán)體,循環(huán)的內(nèi)容
d.迭代(改變?cè)瓉?lái)的值)
//語(yǔ)法:
for(初始化;條件判斷;迭代)
{
//循環(huán)體 具體反復(fù)執(zhí)行的代碼
}
2金度、案例
打印1-100之間的偶數(shù)列
for (int i = 1; i <= 100; i++) {
if(i%2==0){
System.out.println("i=" + i);
}
}
3、for執(zhí)行順序
- 第一步严沥,對(duì)
i
進(jìn)行初始化為1 - 第二步猜极,判斷
i
是否小于100 - 第三步,如果返回
true
,執(zhí)行對(duì)應(yīng)語(yǔ)句塊內(nèi)容 - 第四步消玄,執(zhí)行語(yǔ)句塊內(nèi)容跟伏,進(jìn)行迭代丢胚,將
i
進(jìn)行++操作 - 第五步,迭代完畢之后在進(jìn)行判斷受扳,執(zhí)行
第二步
操作 - 第六步携龟,如果滿足繼續(xù)進(jìn)入代碼塊,如果
不滿足勘高,則跳出循環(huán)
2.3 while循環(huán)
當(dāng)條件為 true 時(shí)峡蟋,while 循環(huán)執(zhí)行一條語(yǔ)句(也可以是一個(gè)語(yǔ)句塊)。一般格式為
語(yǔ)法格式(先判斷华望,再執(zhí)行):
[初始值]
while(條件)
{
//語(yǔ)句塊
// 迭代[更改初始值]
}
如果開(kāi)始循環(huán)條件的值就為 false, 則 while 循環(huán)體一次也不執(zhí)行
案例:
將1-100之間的和進(jìn)行累加操作
public static void main(String[] args) {
int result = 0;
int i = 1;
while (i <= 100) { // 判斷條件
// 語(yǔ)句塊
result += i;
System.out.println("i=" + i + " result=" + result);
i++;
}
}
2.4 do...while
如果希望循環(huán)體至少執(zhí)行一次蕊蝗, 則應(yīng)該將檢測(cè)條件放在最后。 使用 do/while 循環(huán)語(yǔ)句可以實(shí)現(xiàn)這種操作方式;
while
和do...while
最大的區(qū)別就是:
- while:先判斷立美,再執(zhí)行
- do...while:先執(zhí)行匿又,再判斷方灾,所以do...while至少都會(huì)執(zhí)行一次
語(yǔ)法格式:
語(yǔ)法格式:(先執(zhí)行建蹄,在判斷:不管條件如何,都會(huì)至少執(zhí)行一次)
[初始化內(nèi)容]
do{
//語(yǔ)句塊
[迭代]
}while(判斷條件);
案例:
將1-100之間的和進(jìn)行累加操作
public static void main(String[] args) {
int result = 0;
int i = 1;
do {
result += i;
System.out.println("i=" + i + " result=" + result);
i++;
} while (i <= 100);
}
2.5 中斷循環(huán)
Java提供了continue
和break
關(guān)鍵字用來(lái)終止循環(huán)繼續(xù)執(zhí)行裕偿。
-
continue
用來(lái)終止本次循環(huán)洞慎,該continue
關(guān)鍵字后面的所有內(nèi)容都不會(huì)被執(zhí)行;然而continue
會(huì)迭代嘿棘,然后執(zhí)行下一次循環(huán)劲腿; -
break
用來(lái)跳出當(dāng)前所在的循環(huán),屬于該循環(huán)下所有的內(nèi)容都會(huì)終止執(zhí)行鸟妙;
以下是兩者的使用注意事項(xiàng):
- break只能用于switch語(yǔ)句和循環(huán)語(yǔ)句中焦人。
- continue 只能用于循環(huán)語(yǔ)句中。
- 標(biāo)號(hào)語(yǔ)句必須緊接在循環(huán)的頭部重父。標(biāo)號(hào)語(yǔ)句不能用在非循環(huán)語(yǔ)句的前面花椭。
- break和continue之后不能有其他的語(yǔ)句,因?yàn)槌绦蛴肋h(yuǎn)不會(huì)執(zhí)行break 和 continue之后的語(yǔ)句房午。
案例:
當(dāng)i=5是矿辽,使用不同關(guān)鍵字,所得到結(jié)果
for (int i = 1; i <= 10; i++) {
if (i == 5) {
//break; //1 2 3 4
continue; //1 2 3 4 6 7 8 9 10
}
System.out.println("continue==>i = " + i);
}
2.6 嵌套循環(huán)
public static void main(String[] args) {
// 1. 外層: 控制行數(shù) 1-9行
// 2.內(nèi)層 :控制每一行 有多少個(gè)列(需要計(jì)算多殺次)
for (int i = 1; i <= 9; i++) {
// aa:標(biāo)號(hào) 使用:分割 必須寫(xiě)在循環(huán)的頭部
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (j * i) + "\t");
}
System.out.println(); // 換行
}
}
三郭厌、實(shí)戰(zhàn)題
第1題:
實(shí)現(xiàn)一個(gè)查詢?cè)绿鞌?shù)的程序鍵盤(pán)輸入年月 判斷這年這個(gè)月有多少天袋倔。<閏年條件:能被4整除且不能被100整除或者能被400整除>
第2題:
國(guó)家稅務(wù)局規(guī)定不同行業(yè)的稅收數(shù)額度不一樣
稅收=(工資-起征點(diǎn))*稅率
行業(yè)有
1.服務(wù)行業(yè) 2.制造業(yè) 3.農(nóng)業(yè)
1.服務(wù)行業(yè)稅收的起征點(diǎn)是2000 元 2000元以上需要繳納10%的個(gè)人所得稅
2.制造業(yè)稅收的起征點(diǎn)是3000元 3000元以上需要繳納5%的個(gè)人所得稅
3.農(nóng)業(yè)稅收的起征點(diǎn)是1500元 1500元以上需要繳納2%的個(gè)人所得稅
提示用戶選擇行業(yè),輸入工資 折柠,輸出稅后工資宾娜。
第三題:
運(yùn)費(fèi)計(jì)算器:運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi).路程越遠(yuǎn)每公里運(yùn)費(fèi)越低.每公里每噸貨物的基本運(yùn)費(fèi)為p,貨物重為w,距離為s,折扣為d,則總運(yùn)費(fèi)f的計(jì)算公式為
f=p*w*s*(1-d)
s<250沒(méi)有折扣
250<=s <500 2%折扣
500<=s<1000 5%折扣
1000<=s<2000 8%折扣
2000以上 15%折扣。
第四題:
編寫(xiě)一個(gè)某年第一天是星期幾的查詢器:程序輸出:XXXX年一月一日是 星期X
提示:1900年一月一日是星期一
第五題:
根據(jù)流程圖完成銀行取錢業(yè)務(wù)程序
第六題:
編寫(xiě)一個(gè)日歷程序:輸入年月 按照格式輸出該年月的日歷
提示:1900年一月一日是星期一
本博文由 IT蚱蜢哥 原創(chuàng)發(fā)布扇售!歡迎轉(zhuǎn)載前塔,注明出處贾陷!