Java流程控制
本章一起來探討下Java的流程控制語句。主要從以下幾個方面展開:
- Java分支語句
- Java迴圈語句
Java其實和其他任何的開發語言一樣,分支語句和迴圈語句是必不可少的,有個這兩個功能之後,我們完成類似:
- 判斷成績等級,優秀或者良好
- 完成九九乘法表等相關的操作
一、分支語句
1.1 分支語句簡介
- 分支語句根據一定的條件有選擇地執行或跳過特定的語句
- 從而來完成根據不同的條件,得到不同的結果,來滿足現實生活中的需求
- Java中提供了多種實現分支語句的方式
- 1)
if
: 單分支語句,如果滿足進入該語句塊 - 2)
if...else
: 如果滿足進入該if語句塊,否則進入else語句塊,二選一 - 3)
if...else if...else if...else
:多分支語句,條件滿足進入一個分支,如果都不滿足進入 else - 4)
switch...case
: 實現語句塊
- 1)
1.2 if單分支語句
if
單分支語句,表示只要條件滿足,就會進入語句塊內容,否則直接跳過。
上圖左側部分就是表示if
單分支語句
//語法
if(條件表示式){
//如果條件為true,執行到該語句。否則跳過該語句
}
案例:
如果成績score大於等於90,將grade等級設定有優秀
,否則忽略
public static void main(String[] args) {
int score = 91;
String grade = "";
if(score>=90) {
grade = "優秀";
System.out.println("小明獲得雞腿一隻");
}
System.out.println("end...");
}
注意:以後程式碼過程中,注意測試。否則條件特別容易被漏掉
1.3 if...else雙分支語句
if...else
稱為雙分支語句,如果條件滿足則進入if
語句塊,否則進入else
語句塊;
也就是說if
或else
語句塊必須會進入其中的一個分支;同時也不存在兩個分支同時進入;
如上圖右側,就是if...else
的使用場景
語法:
// 格式 雙分支語句 if 或者else 永遠進入一個分支
if(條件){
//條件為真,進入
}else{
//否則進入else
}
案例:
如果小明成績不低於90分,獎勵一隻雞腿,否則只能吃青菜
public static void main(String[] args) {
int score = 89;
//注意:以後程式碼過程中,注意測試。否則條件特別容易被漏掉
if(score>=90) {
System.out.println("小明獲得雞腿一隻");
}else {
System.out.println("小明被罰只能吃青菜");
}
System.out.println("end...");
}
1.4 if...else if...else語法
if...else if...else
也被稱為多分支語句,可以指定多個條件。
但是能夠進入分支的只有一個
語法:
//語法
if(條件){
//滿足進入
}else if(條件2){
//滿足進入
}else if(條件3){
//滿足進入
}else{
//都不滿足,進入else
}
案例:
不同的條件進入不同的分支,例如:成績為88,獎勵麻辣雞爪一個
public static void main(String[] args) {
int score = 50;
// 注意:以後程式碼過程中,注意測試。否則條件特別容易被漏掉
if (score >= 90) {
System.out.println("小明獲得雞腿一隻");
} else if (score >= 80) {
System.out.println("麻辣雞爪一個!");
} else if (score >= 60) {
System.out.println("獎勵練習題一打!");
} else {
System.out.println("小明被暴打了一頓");
}
System.out.println("end...");
}
注意:如果多個條件同時滿足,那麼會從上而下,自動匹配。當進入一個分支之後,就不會在進入其他分支。
1.5 switch...case語句
在處理多個選項的時候,除了可以使用if...else
,Java還提供了另外一種分支語句,那就是switch...case
switch
語句將從選項值相匹配的case
標籤處開始執行,知道語句結束或者遇到break
關鍵字
語法結構:
- switch(表示式)中表示式的返回值必須是下述幾種型別之一:
int
,byte
,char
,short
,列舉
,字串
- case子句中的值必須是
常量
,且所有case子句中的值應是不同的; - default子句是最終執行
break
語句用來在執行完一個case分支後使程式跳出switch語句塊;
// 給固定的內容
switch(表示式){
case 常量1:
//語句塊
break;
case 常量1:
//語句塊
break;
case 常量1:
//語句塊
break;
default:
//語句塊:類似else
}
案例:
根據不同的值,獲取不同的級別
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("墊底");
}
}
注意:
①表示式的值如果和常量的內容保持一致,表示會進入該程式碼塊
②break,跳出當前的語句快,否則會一直往下執行
二、迴圈語句
2.1 迴圈語句簡介
在滿足指定條件下,反覆執行特定的程式碼。
例如:將1-100
之間的和進行累加;
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中提供了三種基本的迴圈:
- for迴圈
- 1)普通for迴圈
- 2)增強for迴圈
- while
- do...while
2.2 for迴圈
for
迴圈語句是支援迭代的一種通用結構, 利用每次迭代之後更新的計數器或類似的變數來控制迭代次數
for
一般用來明確迴圈次數的情況使用,更加的方便
1、迴圈組成部分:
a.初始化
b.迴圈條件
c.迴圈體,迴圈的內容
d.迭代(改變原來的值)
//語法:
for(初始化;條件判斷;迭代)
{
//迴圈體 具體反覆執行的程式碼
}
2、案例
列印1-100之間的偶數列
for (int i = 1; i <= 100; i++) {
if(i%2==0){
System.out.println("i=" + i);
}
}
3、for執行順序
- 第一步,對
i
進行初始化為1 - 第二步,判斷
i
是否小於100 - 第三步,如果返回
true
,執行對應語句塊內容 - 第四步,執行語句塊內容,進行迭代,將
i
進行++操作 - 第五步,迭代完畢之後在進行判斷,執行
第二步
操作 - 第六步,如果滿足繼續進入程式碼塊,如果
不滿足,則跳出迴圈
2.3 while迴圈
當條件為 true 時,while 迴圈執行一條語句(也可以是一個語句塊)。一般格式為
語法格式(先判斷,再執行):
[初始值]
while(條件)
{
//語句塊
// 迭代[更改初始值]
}
如果開始迴圈條件的值就為 false, 則 while 迴圈體一次也不執行
案例:
將1-100之間的和進行累加操作
public static void main(String[] args) {
int result = 0;
int i = 1;
while (i <= 100) { // 判斷條件
// 語句塊
result += i;
System.out.println("i=" + i + " result=" + result);
i++;
}
}
2.4 do...while
如果希望迴圈體至少執行一次, 則應該將檢測條件放在最後。 使用 do/while 迴圈語句可以實現這種操作方式;
while
和do...while
最大的區別就是:
- while:先判斷,再執行
- do...while:先執行,再判斷,所以do...while至少都會執行一次
語法格式:
語法格式:(先執行,在判斷:不管條件如何,都會至少執行一次)
[初始化內容]
do{
//語句塊
[迭代]
}while(判斷條件);
案例:
將1-100之間的和進行累加操作
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 中斷迴圈
Java提供了continue
和break
關鍵字用來終止迴圈繼續執行。
continue
用來終止本次迴圈,該continue
關鍵字後面的所有內容都不會被執行;然而continue
會迭代,然後執行下一次迴圈;break
用來跳出當前所在的迴圈,屬於該迴圈下所有的內容都會終止執行;
以下是兩者的使用注意事項:
- break只能用於switch語句和迴圈語句中。
- continue 只能用於迴圈語句中。
- 標號語句必須緊接在迴圈的頭部。標號語句不能用在非迴圈語句的前面。
- break和continue之後不能有其他的語句,因為程式永遠不會執行break 和 continue之後的語句。
案例:
當i=5是,使用不同關鍵字,所得到結果
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 巢狀迴圈
public static void main(String[] args) {
// 1. 外層: 控制行數 1-9行
// 2.內層 :控制每一行 有多少個列(需要計算多殺次)
for (int i = 1; i <= 9; i++) {
// aa:標號 使用:分割 必須寫在迴圈的頭部
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + (j * i) + "\t");
}
System.out.println(); // 換行
}
}
三、實戰題
第1題:
實現一個查詢月天數的程式鍵盤輸入年月 判斷這年這個月有多少天。<閏年條件:能被4整除且不能被100整除或者能被400整除>
第2題:
國家稅務局規定不同行業的稅收數額度不一樣
稅收=(工資-起徵點)*稅率
行業有
1.服務行業 2.製造業 3.農業
1.服務行業稅收的起徵點是2000 元 2000元以上需要繳納10%的個人所得稅
2.製造業稅收的起徵點是3000元 3000元以上需要繳納5%的個人所得稅
3.農業稅收的起徵點是1500元 1500元以上需要繳納2%的個人所得稅
提示使用者選擇行業,輸入工資 ,輸出稅後工資。
第三題:
運費計算器:運輸公司對使用者計算運費.路程越遠每公里運費越低.每公里每噸貨物的基本運費為p,貨物重為w,距離為s,折扣為d,則總運費f的計算公式為
f=p*w*s*(1-d)
s<250沒有折扣
250<=s <500 2%折扣
500<=s<1000 5%折扣
1000<=s<2000 8%折扣
2000以上 15%折扣。
第四題:
編寫一個某年第一天是星期幾的查詢器:程式輸出:XXXX年一月一日是 星期X
提示:1900年一月一日是星期一
第五題:
根據流程圖完成銀行取錢業務程式
第六題:
編寫一個日曆程式:輸入年月 按照格式輸出該年月的日曆
提示:1900年一月一日是星期一