- 了解順序結構的相關概述
- 掌握選擇結構之if語句相關知識點
- 掌握選擇結構之switch語句相關知識點
1. 流程控制
1.1 概述
在一個程序執(zhí)行的過程中磅废,各條語句的執(zhí)行順序?qū)Τ绦虻慕Y果是有直接影響的琢融。所以,我們必須清楚每條語句的執(zhí)行流程。而且,很多時候要通過控制語句的執(zhí)行順序來實現(xiàn)我們想要的功能蜕窿。
例如: 某些代碼是滿足特定條件的情況下, 才會被執(zhí)行. 而有些代碼, 在滿足某些條件的情況下, 需要重復執(zhí)行, 這些, 都需要用到流程控制語句.
1.2 分類
- 順序結構
- 選擇結構(if語句, switch.case語句)
- 循環(huán)結構(for循環(huán), while循環(huán), do.while循環(huán))
1.3 順序結構
概述
順序結構指的是代碼是按照從上往下, 從左往右的順序, 依次逐行執(zhí)行的, 且順序結構也是Java程序的默認結構.
圖解
需求
定義類OrderDemo01, 在類中定義main方法, 打印如下數(shù)據(jù):
//start
//HelloWorld1
//HelloWorld2
//HelloWorld3
//end
參考代碼
public class OrderDemo01 {
public static void main(String[] args) {
//打印指定的數(shù)據(jù)
System.out.println("start");
System.out.println("HelloWorld1");
System.out.println("HelloWorld2");
System.out.println("HelloWorld13");
System.out.println("end");
}
}
2. 選擇結構之if語句
2.1 概述
如果我們想某些代碼是在滿足條件的情況下, 才能被執(zhí)行, 此時就需要用到選擇結構了, 選擇結構也叫分支結構, 主要分為以下兩種:
- if語句
- switch.case語句
2.2 分類
if語句一般用于范圍
的判斷, 例如: 如果當前時間是0~8點, 小黑就和你說: 早上好
, 如果當前時間是9 ~12點, 小黑就和你說: 中午好
. 根據(jù)應用場景的不同(即: 分支個數(shù)不同), if語句的格式主要分為以下三種:
- if語句(也叫: 單分支)
- if.else語句(也叫: 雙分支)
- if.else if語句(也叫: 多分支)
2.3 單分支
單分支結構一般用來判斷一種情況
, 格式如下:
格式
if(關系表達式) {
//語句體;
}
執(zhí)行流程
- 先執(zhí)行關系表達式, 看其結果是true還是false.
- 如果是true, 則執(zhí)行
大括號
中的語句體. - 如果是false, 則
大括號
中的語句體不執(zhí)行.
圖解
需求
定義變量time表示時間, 如果它的范圍是在[0,8]之間, 就打印早上好
, 否則不操作.
解釋: [0, 8], 意思是說 0~8之間, 包含0, 也包含8, 這種寫法屬于"前閉后閉".
[0, 8), 意思是: 0~8之間, 包含0, 不包含8, 這種寫法屬于"前閉后開", 也叫: 包左不包右.
參考代碼
public class IfDemo01 {
public static void main(String[] args) {
int time = 5;
if(time >= 0 && time <= 8) {
System.out.println("早上好");
}
}
}
2.4 雙分支
雙分支結構指的是if. else語句, 一般用來判斷兩種情況
, 格式如下:
2.4.1 格式
if(關系表達式) { //if的意思: 如果
//語句體1;
} else { //否則...
//語句體2;
}
2.4.2 執(zhí)行流程
- 先執(zhí)行關系表達式, 看其結果是true還是false.
- 如果是true, 則執(zhí)行語句體1.
- 如果是false, 則執(zhí)行語句體2.
2.4.3 圖解
2.4.5 案例一: if格式二入門
需求
定義變量time表示時間, 如果它的范圍是在0~8之間, 就打印早上好
, 否則就打印中午好
.
參考代碼
public class IfDemo02 {
public static void main(String[] args) {
int time = 5;
if(time >= 0 && time <= 8) {
System.out.println("早上好");
} else {
System.out.println("中午好");
}
}
}
2.4.6 案例二: 判斷奇偶數(shù)
需求
- 提示用戶鍵盤錄入一個數(shù)據(jù)并接收.
- 判斷該數(shù)據(jù)是奇數(shù)還是偶數(shù), 并將結果打印到控制臺上.
參考代碼
public class IfDemo03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請錄入一個整數(shù): ");
int num = sc.nextInt();
if (num % 2 == 0) {
System.out.println(num + "是偶數(shù)");
} else {
System.out.println(num + "是奇數(shù)");
}
}
}
記憶
-
if語句控制的語句體如果只有一行代碼, 則該大括號可以省略不寫.
例如:
if(5 > 3)
? System.out.println("夯哥最純潔!");
-
if語句控制的語句體如果只有一行代碼, 則該大括號可以省略不寫, 定義變量的語法除外.
例如:
if(5 > 3)
int a = 10; //這樣寫會報錯, jvm會識別這樣代碼為兩行: int a; a = 10;
上述的代碼就相當于:
if(5 > 3) {
? int a;
}
a = 10; //這樣寫肯定會報錯.
-
你省略if后邊的大括號時, 有個問題一定要注意, 不要亂寫
分號
.例如:
if(5 > 3) ; //這里如果寫分號了, 就意味著if語句結束了.
System.out.println("本意: 這行代碼只有條件成立才會被執(zhí)行");
2.5 多分支
多分支結構指的是if. else if語句, 一般用來判斷多種情況
, 格式如下:
2.5.1 格式
if(關系表達式1) {
//語句體1;
} else if(關系表達式2){
//語句體2;
} else if(關系表達式3){ //這里可以根據(jù)需求, 有多個else if語句
//語句體3;
} else {
//語句體n;
}
2.4.2 執(zhí)行流程
- 先執(zhí)行關系表達式1, 看其結果是true還是false.
- 如果是true, 則執(zhí)行語句體1, 整個if語句結束.
- 如果是false, 則判斷關系表達式2, 看其結果是true還是false.
- 如果是true, 則執(zhí)行語句體2, 整個if語句結束.
- 如果是false, 則判斷關系表達式3, ...以此類推.
- 如果所有的關系表達式都不成立, 則執(zhí)行else語句的語句體n, 整個if語句結束.
2.4.3 圖解
2.4.4 案例一: 打印星期
需求
- 提示用戶錄入[1, 7]之間的數(shù)字, 并接收.
- 根據(jù)用戶錄入的數(shù)字, 打印對應的星期, 格式如下:
- 用戶錄入1, 打印"星期一"
- 用戶錄入2, 打印"星期二"
- ...以此類推
- 用戶錄入非法數(shù)字, 打印"沒有這樣的日期"
參考代碼
import java.util.Scanner;
public class IfDemo04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請錄入一個1 - 7之間的整數(shù): ");
int week = sc.nextInt();
if (week == 1) {
} else if(week == 2) {
System.out.println("星期二");
} else if(week == 3) {
System.out.println("星期三");
} else if(week == 4) {
System.out.println("星期四");
} else if(week == 5) {
System.out.println("星期五");
} else if(week == 6) {
System.out.println("星期六");
} else if(week == 7) {
System.out.println("星期日");
} else {
System.out.println("沒有這樣的日期, 你是從火星來的吧!");
}
}
}
2.4.5 案例二: 發(fā)放獎勵
需求
- 小明快要期末考試了娩嚼,小明爸爸對他說,會根據(jù)他的考試成績萨螺,送他不同的禮物.
- 假如你可以控制小明的得分,請用程序?qū)崿F(xiàn)小明到底該獲得什么樣的禮物愧驱,并在控制臺輸出慰技。
- 禮物標準如下:
- 95~100 山地自行車一輛
- 90~94 游樂場玩一次
- 80~89 變形金剛玩具一個
- 80以下 胖揍一頓
參考代碼
import java.util.Scanner;
public class IfDemo05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請錄入小明的考試成績: ");
int score = sc.nextInt();
if (score >= 95 && score <= 100) {
System.out.println("獎勵小明: 山地自行車一輛");
} else if(score >= 90 && score < 95) {
System.out.println("獎勵小明: 游樂場玩兒一次");
} else if(score >= 80 && score < 90) {
System.out.println("獎勵小明: 變形金剛玩具一個");
} else if(score >= 0 && score < 80){
System.out.println("獎勵小明: 男女雙混組合拳 + 掃帚棒法");
} else {
System.out.println("考試成績錄入有誤.");
}
}
}
2.4.6 案例三: 獲取最大值
需求
- 提示用戶錄入3個整數(shù), 并接收.
- 通過if語句獲取這三個整數(shù)的最大值.
- 將結果打印到控制臺上.
參考代碼
import java.util.Scanner;
public class IfDemo06 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請錄入第一個整數(shù): ");
int a = sc.nextInt();
System.out.println("請錄入第二個整數(shù): ");
int b = sc.nextInt();
System.out.println("請錄入第三個整數(shù): ");
int c = sc.nextInt();
//方式一: if嵌套實現(xiàn).
int max = a;
int max2 = a;
if (a > b) {
if (a > c) {
max = a;
} else {
max = c;
}
} else {
if(b > c) {
max = b;
} else {
max = c;
}
}
System.out.println("最大值: " + max);
//方式二: if. else.if語句實現(xiàn)
if (a > b && a > c) {
max2 = a;
} else if(b > a && b > c) {
max2 = b;
} else {
max2 = c;
}
System.out.println("最大值: " + max2);
}
}
3. 選擇結構之switch語句
3.1 概述
switch語句, 一般是用于做固定值
判斷的, 在實際開發(fā)中, 用到的頻率也非常高, 所以也是要求大家掌握的知識點.
3.2 格式
switch(表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
case 值3:
語句體3;
break;
... //根據(jù)需求, 可以寫多組case.
default:
語句體n;
break;
}
3.4 格式詳解
3.5 執(zhí)行流程
先計算表達式的值, 然后按照從上往下的順序依次和每一個case對應的值相匹配.
如果能匹配成功, 則執(zhí)行該case對應的語句體, 然后執(zhí)行break, 至此, 整個switch語句結束.
-
如果和所有的case值都不匹配, 則執(zhí)行default對應的語句體, 然后執(zhí)行break, 至此, 整個switch語句結束.
解釋: default語句就類似于
if. else語句中的else
, 當所有條件都不滿足時才會執(zhí)行.
3.6 執(zhí)行流程圖解
3.7 示例一: 春夏秋冬
需求
- 一年有12個月, 分屬于春夏秋冬4個季節(jié), 鍵盤錄入一個月份, 請用程序?qū)崿F(xiàn)判斷該月份屬于哪個季節(jié), 并輸出。
- 具體標準如下:
- 輸入: 1吻商、2糟红、12 輸出:冬季
- 輸入: 3、4盆偿、5 輸出:春季
- 輸入: 6、7捎稚、8 輸出:夏季
- 輸入: 9、10句旱、11 輸出:秋季
- 輸入:其它數(shù)字 輸出:數(shù)字有誤
參考代碼
import java.util.Scanner;
public class SwitchDemo07 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請錄入一個月份: ");
int month = sc.nextInt();
switch (month) {
case 12:
System.out.println("冬季");
break;
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;
case 6:
System.out.println("夏季");
break;
case 7:
System.out.println("夏季");
break;
case 8:
System.out.println("夏季");
break;
case 9:
System.out.println("秋季");
break;
case 10:
System.out.println("秋季");
break;
case 11:
System.out.println("秋季");
break;
default:
System.out.println("沒有這樣的日期");
break;
}
}
}
3.8 case穿透
概述
在switch語句中,如果case的后面不寫break腥泥,將出現(xiàn)case穿透現(xiàn)象蛔外,也就是不會在判斷下一個case的值,直接向后運行豹爹,直到遇到break臂聋,或者整體switch結束孩等。
格式
switch(表達式) {
case 值1:
語句體1; //假設表達式的值 = 值1, 則執(zhí)行完語句體1后, 不會判斷第二個case, 直接執(zhí)行語句體2;
break;
case 值2:
語句體2;
break;
case 值3:
語句體3;
break;
... //根據(jù)需求, 可以寫多組case.
default:
語句體n;
break;
}
需求
通過case穿透
, 優(yōu)化剛才的春夏秋冬
案例.
參考代碼
import java.util.Scanner;
public class SwitchDemo08 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請錄入一個月份: ");
int month = sc.nextInt();
switch (month) {
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("沒有這樣的日期");
break;
}
}
}
3.9 思考題
- switch語句的小括號中, 可以放什么?
- default語句必須放到switch語句的最后嗎?
- break關鍵字可以省略嗎? 對執(zhí)行結果是否有影響?
3.10 案例二: 發(fā)放獎勵
需求
- 小明快要期末考試了肄方,小明爸爸對他說权她,會根據(jù)他的考試成績隅要,送他不同的禮物.
- 假如你可以控制小明的得分拾徙,請用程序?qū)崿F(xiàn)小明到底該獲得什么樣的禮物感局,并在控制臺輸出询微。
- 禮物標準如下:
- 90~100 山地自行車一輛
- 80~89 游樂場玩一次
- 70~79 變形金剛玩具一個
- 70以下 胖揍一頓
參考代碼
import java.util.Scanner;
public class SwitchDemo09 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請錄入小明的考試成績: ");
int score = sc.nextInt();
if (score >= 0 && score <= 100) {
//合法成績
switch (score / 10) {
case 10:
case 9:
System.out.println("獎勵小明: 山地自行車一輛");
break;
case 8:
System.out.println("獎勵小明: 游樂場玩兒一次");
break;
case 7:
System.out.println("獎勵小明: 變形金剛玩具一個");
break;
default:
System.out.println("獎勵小明: 男女雙混組合拳 + 掃帚棒法");
break;
}
} else {
//非法成績
System.out.println("您錄入的成績有誤!");
}
}
}
4 練習題
4.1 案例一: 漲工資.
需求
根據(jù)工齡(整數(shù))給員工漲工資(整數(shù)), 工齡和基本工資通過鍵盤錄入
-
漲工資的條件如下:
- [10-15) +5000
- [5-10) +2500
- [3~5) +1000
- [1~3) +500
- [0~1) +200
-
打印格式如下:
您目前工作了10年撑毛,基本工資為 3000元, 應漲工資 5000元,漲后工資 8000元
參考代碼
public static void main(String[] args) {
// 1.創(chuàng)建鍵盤錄入對象
Scanner sc = new Scanner(System.in);
// 2.定義變量age表示工齡(假設為int類型)藻雌,定義變量salary表示基本工資(假設為int類型)
// int age,salary;
// 3.通過鍵盤錄入給工齡age賦值和基本工資salary賦值
// age = sc.nextInt();
// salary = sc.nextInt();
int age = sc.nextInt();
int salary = sc.nextInt();
int addSalary = 0;
// 4.對工齡進行邏輯判斷胯杭,根據(jù)不同的工齡區(qū)間受啥,進行漲工資salary+=n;(n表示:漲工資的數(shù)量)
if(age>=15||age<0) {
System.out.println("您輸入的工齡不合法~");
return ;
}
//[10-15) +5000
if(age>=10&&age<15) {
addSalary = 5000;
} else if(age>=5&&age<10){//[5-10) +2500
addSalary = 2500;
} else if(age>=3&&age<5) {//[3~5) +1000
addSalary = 1000;
} else if(age>=1&&age<3) {//[1~3) +500
addSalary = 500;
} else if(age>=0&&age<1) {//[0~1) +200
addSalary = 200;
}
// 5.按照格式進行打印
System.out.println("您目前工作了"+age+"年顽频,基本工資為 "+salary+"元, 應漲工資 "+addSalary+"元,漲后工資 "+(salary+addSalary)+"元");
}
4.2 案例二: 定義計算器
-
需求:
1.功能描述:模擬計算器功能糯景,對鍵盤錄入的兩個int類型的數(shù)據(jù)進行加蟀淮、減冀宴、乘略贮、除的運算逃延,并打印運算結果
2.要求:
(1)鍵盤錄入三個整數(shù),其中前兩個整數(shù)代表參加運算的數(shù)據(jù)揽祥, 第三個整數(shù)為要進行的運算(0:表示加法運算,1:表示減法運算,2:表示乘法運算,3:表示除法運算) (2)使用今天所學知識完成功能 (3)演示格式如下: 請輸入第一個整數(shù):30 請輸入第二個整數(shù):40 請輸入您要進行的運算(0:表示加法運算,1:表示減法運算,2:表示乘法運算,3:表示除法運算):0 控制臺輸出:30+40=70
實現(xiàn)步驟:
代碼:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入第一個數(shù)據(jù)");
int a = sc.nextInt();
System.out.println("請輸入第二個數(shù)據(jù)");
int b = sc.nextInt();
System.out.println("請輸入您要進行的運算(0:表示加法運算,1:表示減法運算,2:表示乘法運算,3:表示除法運算):");
int type = sc.nextInt();
//定義變量用于接收結果
double result = 0;
switch(type) {
case 0://做加法
result = a + b;
System.out.println(a+"+"+b+"="+result);
break;
case 1:
result = a - b;
System.out.println(a+"-"+b+"="+result);
break;
case 2:
result = a * b;
System.out.println(a+"*"+b+"="+result);
break;
case 3:
result = a / (b + 0.0);
System.out.println(a+"/"+b+"="+result);
break;
default:
System.out.println("您輸入有誤");
}
}
4.3 案例三: 水仙花數(shù)
-
需求:
鍵盤錄入一個三位數(shù)字,輸出該三位數(shù)字是否是水仙花數(shù)字?
水仙花數(shù)字要求: 指的是一個三位數(shù)拄丰,個位料按、十位载矿、百位的數(shù)字立方和等于原數(shù)
例如
153 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 + 1 = 153
-
實現(xiàn)步驟:
1.創(chuàng)建鍵盤錄入對象
2.獲取一個int數(shù)字
3.獲取個位,十位,百位
4.求個位,十位,百位的立方和
5.利用if語句判斷立方和是否等于該數(shù)字本身,并輸出結果
代碼實現(xiàn):
public static void main(String[] args) {
//1.創(chuàng)建鍵盤錄入對象
Scanner sc = new Scanner(System.in);
//2.獲取一個int數(shù)字
System.out.println("請輸入一個三位整數(shù)");
int num = sc.nextInt();
//3.獲取個位,十位,百位
int ge = num%10;
int shi = num/10%10;
int bai = num/100%10;
//4.求個位,十位,百位的立方和
int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;
//5.利用if語句判斷立方和是否等于該數(shù)字本身,并輸出結果
if(sum == num) {
System.out.println(num+"是水仙花數(shù)字 ");
} else {
System.out.println(num+"不是水仙花數(shù)字 ");
}
}
今日目標
- 掌握運算符的用法
- 掌握鍵盤錄入功能
- 獨立完成IDEA的安裝和配置
- 掌握紙牌案例
1. 關系運算符
1.1 概述
關系運算符就是用來描述兩個變量或者常量之間的關系的.
主要分為以下6種:
符號 | 說明 |
---|---|
== | a==b闷盔,判斷a和b的值是否相等逢勾,成立為true敏沉,不成立為false |
!= | a!=b,判斷a和b的值是否不相等潦闲,成立為true迫皱,不成立為false |
> | a>b卓起,判斷a是否大于b戏阅,成立為true奕筐,不成立為false |
>= | a>=b离赫,判斷a是否大于等于b渊胸,成立為true翎猛,不成立為false |
< | a<b切厘,判斷a是否小于b,成立為true,不成立為false |
<= | a<=b而克,判斷a是否小于等于b员萍,成立為true碎绎,不成立為false |
1.2 注意事項
- 關系運算符的結果都是boolean類型筋帖,要么是true日麸,要么是false代箭。
- 千萬不要把
==
寫成了=
, 否則結果可能不是你想要的.
1.3 案例
需求
- 定義兩個int類型的變量a和b, 分別賦值為10和5.
- 通過
關系運算符
比較這兩個變量之間的關系, 并打印結果.
參考代碼
public class OperatorDemo01 {
public static void main(String[] args) {
//定義兩個int類型的變量a和b, 分別賦值為10和5.
int a = 10;
int b = 5;
//通過`關系運算符`比較這兩個變量之間的關系, 并打印結果.
System.out.println(a > b);
System.out.println(5 >= 5);
System.out.println(a < b);
System.out.println(5 <= 5);
System.out.println(a != b);
System.out.println(a == b);
System.out.println(a = b);
//關系運算符的最終結果是boolean類型, 所以我們也可以用boolean類型的變量接收.
boolean flag = 10 < 5;
System.out.println(flag);
}
}
2. 邏輯運算符
2.1 概述
邏輯運算符是用來判斷并且, 或者, 除非等邏輯關系的符號.
-
該符號兩端一般連接值為布爾類型的關系表達式
例如: 某企業(yè)招工, 要求年齡必須在 20 ~ 65歲之間.
2.2 分類
注意: 假設下表中的a和b, 都是boolean類型的值.
符號 | 作用 | 說明 |
---|---|---|
& | 邏輯與 | a&b嗡综,并且的意思. 有false則整體為false, 都為true, 則整體為true. |
| | 邏輯或 | a|b极景,或者的意思, 有true則整體為true, 都為false, 則整體為false. |
! | 邏輯非 | !a戴陡,取反的意思, 以前為true, 取反后為false, 以前為false, 取反后為true. |
^ | 邏輯異或 | a^b恤批,異同的意思, 相同為false, 不同為true. |
小技巧:
對一個布爾數(shù)據(jù), 偶數(shù)次取反, 該數(shù)據(jù)值不變.
!true = false
2.3 示例: 邏輯運算符入門
需求
- 定義三個int類型的變量a, b, c, 它們的初始化值分別為10, 20, 30.
- 通過上述的三個變量, 演示各個邏輯運算符.
參考代碼
public class OperatorDemo02 {
public static void main(String[] args) {
int a = 10, b = 20, c = 30;
//&: 邏輯與, 并且的意思, 有false則整體為false.
//相當于: 班長找女朋友, 要求長得漂亮, 并且身材好.
System.out.println((a > b) & (a > c)); //false & false
System.out.println((a < b) & (a > c)); //true & false
System.out.println((a > b) & (a < c)); //false & true
System.out.println((a < b) & (a < c)); //true & true
System.out.println("-----------------");
//|: 邏輯或, 或者的意思, 有true則整體為true.
//相當于: 降低條件了, 要么長得漂亮, 要么身材好.
System.out.println((a > b) | (a > c)); //false | false
System.out.println((a < b) | (a > c)); //true | false
System.out.println((a > b) | (a < c)); //false | true
System.out.println((a < b) | (a < c)); //true | true
System.out.println("-----------------");
//!: 邏輯非, 取反的意思
//相當于: 只要不是男的就行.
System.out.println(!(a > b)); //!false
System.out.println(!(a < b)); //!true
System.out.println("-----------------");
//邏輯異或, 異同的意思, 相同為false, 不同為true.
//相當于: 最后還是找了個男的, 但是領不了證.
//法律規(guī)定: 一夫一妻, 一男一女, 必須是異性才能領證.
System.out.println((a > b) ^ (a > c)); //false ^ false
System.out.println((a < b) ^ (a > c)); //true ^ false
System.out.println((a > b) ^ (a < c)); //false ^ true
System.out.println((a < b) ^ (a < c)); //true ^ true
}
}
2.4 短路邏輯運算符
在實際開發(fā)中, 并且, 或者
這樣的操作是非常多的, 但是上述的&(邏輯與), !(邏輯或)
運算符沒有短路效應
, 所以效率相對較低, 針對這種情況, 我們可以使用&&(短路與), ||(短路或)
來優(yōu)化.
2.4.1 格式
符號 | 作用 | 說明 |
---|---|---|
&& | 短路與 | 作用和&相同诀浪,但是有短路效果, 前邊出現(xiàn)false, 后邊不執(zhí)行. |
|| | 短路或 | 作用和|相同雷猪,但是有短路效果, 前邊出現(xiàn)true, 后邊不執(zhí)行. |
2.4.2 解釋
- 在短路與運算中求摇,只要有一個表達式的值為false与境,那么結果就可以判定為false了摔刁,沒有必要將所有表達式的值都計算出來共屈,短路與運算符就有這樣的效果拗引,可以提高效率寺擂。
- 同理在短路或運算中怔软,一旦發(fā)現(xiàn)值為true,右邊的表達式將不再參與運算括改。
2.4.3 短路和非短路之間的區(qū)別
-
邏輯與 和 短路與之間的區(qū)別
- 邏輯與&(也叫單與): 無論左邊真假,右邊都要執(zhí)行虱疏。
- 短路與&&(也叫雙與): 如果左邊為真做瞪,右邊執(zhí)行装蓬;如果左邊為假牍帚,右邊不執(zhí)行暗赶。
-
邏輯或 和 短路或之間的區(qū)別
- 邏輯或|(也叫單或): 無論左邊真假蹂随,右邊都要執(zhí)行糙及。
- 短路或||(也叫雙或): 如果左邊為假浸锨,右邊執(zhí)行柱搜;如果左邊為真聪蘸,右邊不執(zhí)行健爬。
記憶: 在實際開發(fā)中, 我們用的最多的邏輯運算符就是: &&, ||, !
2.4.4 案例
需求
參考代碼
public class OperatorDemo03 {
public static void main(String[] args) {
//1. 定義兩個int類型的變量a和b, 初始化值分別為: 2, 5
int a = 2, b = 5;
//2. 演示邏輯與(&)
/* System.out.println((a++ > 2) & (b++ < 7)); //兩個表達式都會執(zhí)行.
System.out.println(a);
System.out.println(b);*/
System.out.println("------------------");
//3. 演示短路與(&&)
System.out.println((a++ > 2) && (b++ < 7)); //左邊表達式結果為false, 右邊不執(zhí)行.
System.out.println(a);
System.out.println(b);
}
}
3. 三元運算符
3.1 格式
三元運算符也叫三目運算符
娜遵,即由三部分組成设拟,格式如下:
(關系表達式) ? 表達式1:表達式2纳胧;
3.2 執(zhí)行流程
- 先執(zhí)行關系表達式, 看其結果是true還是false.
- 如果是
true
, 則執(zhí)行表達式1
- 如果是
false
, 則執(zhí)行表達式2
3.3 案例一: 入門案例
需求
- 定義兩個int類型的變量a. b, 初始化值分別為10, 20
- 通過三元運算符, 獲取變量a和b的最大值.
- 將結果(最大值)打印到控制臺上.
參考代碼
public class OperatorDemo04 {
public static void main(String[] args) {
//1. 定義兩個int類型的變量a. b, 初始化值分別為10, 20
int a = 10, b = 20;
//2. 通過三元運算符, 獲取變量a和b的最大值.
int max = a < b ? b : a;
//3. 將結果(最大值)打印到控制臺上.
System.out.println(max);
}
}
3.4 案例二: 判斷老虎體重
需求
動物園里有兩只老虎万皿,已知兩只老虎的體重分別為180kg相寇、200kg唤衫,請用程序?qū)崿F(xiàn)判斷兩只老虎的體重是否相同佳励。
參考代碼
public class OperatorDemo05 {
public static void main(String[] args) {
//1:定義兩個變量用于保存老虎的體重赃承,單位為kg瞧剖,這里僅僅體現(xiàn)數(shù)值即可抓于。
int weight1 = 180;
int weight2 = 200;
//2:用三元運算符實現(xiàn)老虎體重的判斷捉撮,體重相同巾遭,返回true灼舍,否則片仿,返回false砂豌。
boolean flag = weight1 == weight2 ? true : false;
//3:輸出結果
System.out.println("flag:" + flag);
}
}
3.5 案例三: 獲取和尚的最高身高
需求
一座寺廟里住著三個和尚阳距,已知他們的身高分別為150cm筐摘、210cm咖熟、165cm.
請用程序?qū)崿F(xiàn)獲取這三個和尚的最高身高馍管。
參考代碼
public class OperatorDemo06 {
public static void main(String[] args) {
//1:定義三個變量用于保存和尚的身高确沸,單位為cm罗捎,這里僅僅體現(xiàn)數(shù)值即可桨菜。
int h1 = 150;
int h2 = 210;
int h3 = 165;
//2:用三元運算符獲取前兩個和尚的較高身高值替蔬,并用臨時身高變量保存起來承桥。
int temp = h1 > h2 ? h1 : h2;
//3:用三元運算符獲取臨時身高值和第三個和尚身高較高值凶异,并用最大身高變量保存剩彬。
int max = temp > h3 ? temp : h3;
//4:輸出結果
System.out.println("這三個和尚中身高最高的是:" + max +"cm");
}
}
4. 鍵盤錄入
4.1 概述
之前我們涉及到的數(shù)據(jù)都是寫死的, 固定的數(shù)據(jù)
, 這樣做用戶體驗并不好, 我們就想著, 能不能讓用戶錄入數(shù)據(jù), 我們通過特定的代碼來接收, 這樣做就非常好玩兒了, 針對于這種情況, 我們可以通過鍵盤錄入
來實現(xiàn).
即: Java中鍵盤錄入功能指的就是Scanner類, 我們可以通過它的一些方法, 來獲取用戶錄入的數(shù)據(jù).
4.2 使用步驟
-
導包. 包就是文件夾.
注意:
Scanner類是java.util包下的類, 使用之前必須要先導包.
-
導包的語句是定義在類的上面的, 格式如下:
import java.util.Scanner;
-
創(chuàng)建Scanner類的對象, 格式為:
//暫時先理解為固定格式, 也就是必須這么寫. Scanner sc = new Scanner(System.in);
-
通過
Scanner類的nextInt()方法
接收用戶錄入的數(shù)據(jù).int a = sc.nextInt();
4.3 案例一: Scanner入門
需求
- 提示用戶錄入他/她的年齡.
- 通過鍵盤錄入功能, 接收用戶錄入的年齡.
- 將用戶錄入的數(shù)據(jù)(年齡)打印到控制臺上.
參考代碼
//導包
import java.util.Scanner;
public class ScannerDemo01 {
public static void main(String[] args) {
//1. 提示用戶錄入他/她的年齡.
System.out.println("請錄入您的年齡: ");
//2. 通過鍵盤錄入功能, 接收用戶錄入的年齡.
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
//3. 將用戶錄入的數(shù)據(jù)(年齡)打印到控制臺上.
System.out.println("age: " + age);
}
}
4.4 案例二: 鍵盤錄入版和尚身高
需求
- 提示用戶錄入第一個和尚的身高, 并接收
- 提示用戶錄入第二個和尚的身高, 并接收
- 提示用戶錄入第三個和尚的身高, 并接收.
- 通過三元運算符, 獲取三個和尚中身高最矮的那個和尚的身高.
- 將結果(最低身高)打印到控制臺上.
參考代碼
import java.util.Scanner;
public class ScannerDemo02 {
public static void main(String[] args) {
//身高未知,采用鍵盤錄入實現(xiàn)轻黑。首先導包氓鄙,然后創(chuàng)建對象抖拦。
Scanner sc = new Scanner(System.in);
//鍵盤錄入三個身高分別賦值給三個變量态罪。
System.out.println("請輸入第一個和尚的身高:");
int h1 = sc.nextInt();
System.out.println("請輸入第二個和尚的身高:");
int h2 = sc.nextInt();
System.out.println("請輸入第三個和尚的身高:");
int h3 = sc.nextInt();
//用三元運算符獲取前兩個和尚的較低身高值,并用臨時身高變量保存起來券膀。
int temp = h1 < h2 ? h1 : h2;
//用三元運算符獲取臨時身高值和第三個和尚身高較低值芹彬,并用最低身高變量保存舒帮。
int min = temp < h3 ? temp : h3;
//輸出結果玩郊。
System.out.println("這三個和尚中身高最低的是:" + min +"cm");
}
}
IDEA常用快捷鍵
快捷鍵 | 功能 |
---|---|
Alt+Enter |
導入包译红,自動修正代碼 |
Ctrl+Y |
刪除光標所在行 |
Ctrl+D |
復制光標所在行的內(nèi)容耻陕,插入光標位置下面 |
Ctrl+Alt+L |
格式化代碼 |
Ctrl+/ |
單行注釋 |
Ctrl+Shift+/ |
選中代碼注釋诗宣,多行注釋召庞,再按取消注釋 |
Alt+Shift+上下箭頭 |
移動當前代碼行 |
4.1 練習1
需求:
小明左篮灼、右手中分別拿兩張紙牌(比如:黑桃10和紅桃8穿稳,數(shù)字10和8可通過鍵盤錄入),要求編寫代碼交換小明手中的牌
運行效果:
請輸入小明左手中的紙牌:10
請輸入小明右手中的紙牌:8
互換前小明手中的紙牌:
左手中的紙牌:10
右手中的紙牌:8
互換后小明手中的紙牌:
左手中的紙牌:8
右手中的紙牌:10
實現(xiàn)步驟:
1.創(chuàng)建鍵盤錄入對象
2.定義int類型的變量left和right它改,并通過nextInt()方法給left和right賦值
3.定義臨時變量temp實現(xiàn)left和right變量值得交換
4.按格式打印交換后的結果
代碼實現(xiàn):
public class Task01 {
public static void main(String[] args) {
//創(chuàng)建鍵盤錄入對象
Scanner sc = new Scanner(System.in);
//錄入左手中的紙牌數(shù)字
System.out.print("請輸入小明左手中的紙牌:");
int left = sc.nextInt();
//錄入右手中的紙牌數(shù)字
System.out.print("請輸入小明右手中的紙牌:");
int right = sc.nextInt();
//打印互換前的紙牌
System.out.println();
System.out.println("互換前小明手中的紙牌:");
System.out.println("左手中的紙牌:"+left);
System.out.println("右手中的紙牌:"+right);
System.out.println();
// 定義一個臨時變量temp,保存left的值
int temp = left;
// 將right的值賦值給left
left = right;
// 將臨時變量temp的值賦值給right
right = temp;
// 打印交換后紙牌
System.out.println("互換后小明手中的紙牌:");
System.out.println("左手中的紙牌:"+left);
System.out.println("右手中的紙牌:"+right);
}
}
4.2 練習2
需求:
定義一個int類型的變量,初始化值為123,求這個數(shù)的個位,十位,百位分別是多少?
運行效果:
123的個位是3,十位是2,百位是1
實現(xiàn)步驟:
1.定義一個變量,值為123
2.獲取該數(shù)字中個位鲜戒、十位遏餐、百位的數(shù)字
3.打印結果
代碼實現(xiàn):
public class Task02 {
public static void main(String[] args) {
//1.定義一個變量失都,值為123
int n = 123;
//2.獲取該數(shù)字中個位咳焚、十位革半、百位的數(shù)字
// 個位: 數(shù)字 % 10
int ge = n % 10;
// 十位: 數(shù)字 / 10 % 10;
int shi = n / 10 % 10;
// 百位: 數(shù)字 / 100 % 10;
int bai = n /100 % 10;
//3.打印結果
//123的個位是3,十位是2,百位是1
System.out.println(n + "的個位是"+ ge +",十位是"+ shi +",百位是" + bai);
}
}
4.3 練習3
需求:
鍵盤錄入一個三位數(shù)字,輸出該三位數(shù)字是否是水仙花數(shù)字?
水仙花數(shù)字要求: 指的是一個三位數(shù)督惰,個位、十位商虐、百位的數(shù)字立方和等于原數(shù)
例如 `153 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 + 1 = 153`
運行效果:
153是水仙花數(shù)字嗎? true
實現(xiàn)步驟:
1.創(chuàng)建鍵盤錄入對象
2.獲取一個int數(shù)字
3.獲取個位,十位,百位
4.求個位,十位,百位的立方和
5.利用三元運算符求立方和是否等于該數(shù)字本身
6.打印結果
代碼實現(xiàn):
public class Task03 {
public static void main(String[] args) {
//1.創(chuàng)建鍵盤錄入對象
Scanner sc = new Scanner(System.in);
//2.獲取一個int數(shù)字
System.out.println("請輸入一個三位整數(shù)");
int num = sc.nextInt();
//3.獲取個位,十位,百位
int ge = num%10;
int shi = num/10%10;
int bai = num/100%10;
//4.求個位,十位,百位的立方和
int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;
//5.利用三元運算符求立方和是否等于該數(shù)字本身
boolean flag = (sum==num)?true:false;
//6.打印結果
System.out.println(num+"是水仙花數(shù)字嗎? "+flag);
}
}
循環(huán)
- 理解循環(huán)的概述和分類
- 掌握for循環(huán)的用法
- 掌握while循環(huán)的用法
- 了解do.while循環(huán)的用法
1. 循環(huán)結構
1.1 概述
循環(huán),即事物周而復始的變化叮趴。循環(huán)結構指的是,使一部分代碼按照次數(shù)或一定的條件反復執(zhí)行的一種代碼結構. 有些時候, 我們想代碼是在滿足某些條件的情況下, 重復(循環(huán))執(zhí)行的, 就需要用到循環(huán)結構了.
例如: 打印100次HelloWorld
. 如果不用循環(huán)實現(xiàn)的話, 輸出語句我們就需要寫100次, 我們發(fā)現(xiàn)這樣做是非常繁瑣的. 于是, 我們可以通過循環(huán)來優(yōu)化它.
1.2 組成
-
初始化條件.
假設用
int類型的變量x記錄循環(huán)次數(shù)
,x從1開始數(shù), 數(shù)到100剛好100次, 1在這里充當?shù)慕巧褪? 初始化條件. -
判斷條件.
變量x從1開始數(shù), 數(shù)到100結束. 即: x <= 100, 這就是判斷條件, 用來決定循環(huán)是否繼續(xù)執(zhí)行的.
-
控制條件.
用來控制變量x變化的. 每循環(huán)一次, 變量x的值+1. 即: x++就是控制條件.
-
循環(huán)體.
指的是需要重復執(zhí)行的代碼, 例如: System.out.println("Hello World!");
1.3 分類
-
for循環(huán)
一般適用于
循環(huán)次數(shù)固定
的情況. -
while循環(huán)
一般適用于
循環(huán)次數(shù)不固定
的情況. -
do.while循環(huán)
我們在實際開發(fā)中, 基本不用. 適用于
先執(zhí)行一次, 然后判斷
的情況.
2. for循環(huán)
for循環(huán)是我們在實際開發(fā)中應用到的最多的循環(huán), 它一般適用于循環(huán)次數(shù)固定
的情況.
2.1 格式
for(初始化條件1; 判斷條件2; 控制條件3) {
//循環(huán)體4;
}
解釋:
- 初始化條件: 用來記錄 循環(huán)的初始狀態(tài)的. 即: 從哪開始循環(huán).
- 判斷條件: 用來決定循環(huán)是否繼續(xù)執(zhí)行的, 條件成立, 則循環(huán)繼續(xù)執(zhí)行, 條件不成立, 整個循環(huán)就結束了.
- 控制條件: 用來控制初始化條件變化的, 一般是每循環(huán)一次, 初始化條件+1.
- 循環(huán)體: 需要用來重復做的事情(代碼).
2.2 執(zhí)行流程
- 先執(zhí)行初始化條件.
- 然后執(zhí)行判斷條件, 看其結果是true, 還是false.
- 如果是false, 則整個循環(huán)結束.
- 如果是true, 則執(zhí)行循環(huán)體.
- 執(zhí)行控制條件.
- 返回第2步, 繼續(xù)往下重復執(zhí)行.
簡單理解:
- 第一次執(zhí)行: 1, 2, 4, 3.
假設判斷條件成立.
- 重復執(zhí)行: 2, 4, 3.
- 最后一次執(zhí)行: 2
判斷條件不成立, 循環(huán)結束.
2.3 圖解
2.4 案例一: for循環(huán)入門
需求
通過for循環(huán), 打印10次"Hello World!".
參考代碼
//需求: 打印10次HelloWorld
public class ForDemo01 {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("Hello World!");
}
}
}
2.5 案例二: 打印數(shù)字
需求
- 通過for循環(huán), 打印1~5之間的數(shù)字.
- 通過for循環(huán), 打印5~1之間的數(shù)字.
參考代碼
public class ForDemo02 {
public static void main(String[] args) {
//1. 通過for循環(huán), 打印1~5之間的數(shù)字.
for (int i = 1; i <= 5 ; i++) {
System.out.println(i);
}
System.out.println("--------------");
//2. 通過for循環(huán), 打印5~1之間的數(shù)字.
//ritar
for (int i = 5; i >= 1; i--) {
System.out.println(i);
}
}
}
2.6 案例三: 求和案例
需求
通過for循環(huán), 獲取1 ~ 5之間的數(shù)字之和.
參考代碼
public class ForDemo03 {
public static void main(String[] args) {
//1. 定義變量sum, 用來記錄數(shù)據(jù)和.
int sum = 0;
//2. 通過for循環(huán), 依次獲取到1~5之間的數(shù)字.
for (int i = 1; i <= 5; i++) {
//3. 將獲取到的數(shù)字, 累加給變量sum.
sum += i;
}
System.out.println("1 - 5之間的數(shù)字之和是: " + sum);
}
}
細節(jié): 求和變量必須定義到for循環(huán)的外邊, 如果定義到for循環(huán)的內(nèi)容, 則每次循環(huán)都會被重置.
2.7 案例四: 求偶數(shù)和
需求
求1-100之間的偶數(shù)和,并把求和結果打印到控制臺上.
參考代碼
public class ForDemo04 {
public static void main(String[] args) {
//1. 定義變量sum, 用來記錄數(shù)據(jù)和.
int sum = 0;
//2. 通過for循環(huán), 依次獲取到1 - 100之間的數(shù)字.
for (int i = 1; i <= 100; i++) {
//3. 判斷當前遍歷到的數(shù)字是否是偶數(shù).
if (i % 2 == 0) {
//4. 走到這里, 說明是偶數(shù), 累加給變量sum.
sum += i;
}
}
//5. 打印結果.
System.out.println("1 - 100之間的偶數(shù)之和是: " + sum);
}
}
2.8 案例五: 獲取水仙花數(shù)
需求
獲取到所有的水仙花數(shù), 并將結果打印到控制臺上.
解釋:
- 水仙花數(shù)是一個3位數(shù)的整數(shù).
- 該數(shù)字的各個位數(shù)立方和相加等于它本身.
- 例如: 153就是水仙花數(shù), 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 = 153
參考代碼
public class ForDemo05 {
public static void main(String[] args) {
int ge, shi, bai;
for (int i = 100; i < 1000; i++) {
ge = i / 1 % 10;
shi = i / 10 % 10;
bai = i / 100 % 10;
if (i == ge * ge * ge + shi * shi * shi + bai * bai * bai)
System.out.println(i);
}
}
}
2.9 案例六: 計數(shù)思想
需求
統(tǒng)計所有水仙花數(shù)的個數(shù), 并將其打印到控制臺上.
參考代碼
public class ForDemo06 {
public static void main(String[] args) {
int ge, shi, bai,count = 0;
for (int i = 100; i < 1000; i++) {
ge = i / 1 % 10;
shi = i / 10 % 10;
bai = i / 100 % 10;
if (i == ge * ge * ge + shi * shi * shi + bai * bai * bai)
count++;
}
System.out.println("水仙花數(shù)的個數(shù)為: " + count);
}
}
2.10 案例七: 求和 + 計數(shù)
需求
獲取1 - 100之間的奇數(shù)和, 以及奇數(shù)的個數(shù).
參考代碼
//需求: 獲取1 - 100之間的奇數(shù)和, 以及奇數(shù)的個數(shù).
public class ForDemo07 {
public static void main(String[] args) {
int count = 0;
int sum = 0;
for (int i = 1; i <= 100 ; i++) {
if (i % 2 != 0) {
sum += i;
count++;
}
}
System.out.println("1-100之間的奇數(shù)個數(shù)為: " + count + ", 這些奇數(shù)的總和為: " + sum);
}
}
2.11 案例八: 換行輸出
需求
把1~100之間的數(shù)字, 按照6個一行的格式進行輸出.
參考代碼
public class ForDemo08 {
public static void main(String[] args) {
int flag = 6;
int count = 0;
for (int i = 1; i <= 100 ; i++) {
System.out.print(i + "\t");
if (++count % flag == 0)
System.out.println();
}
}
}
3. while循環(huán)
while循環(huán)也是我們在實際開發(fā)中應用到的比較多的循環(huán), 它一般適用于循環(huán)次數(shù)不固定
的情況.
3.1 格式
初始化條件1;
while(判斷條件2) {
//循環(huán)體3;
//控制條件4;
}
解釋:
- 初始化條件: 用來記錄 循環(huán)的初始狀態(tài)的. 即: 從哪開始循環(huán).
- 判斷條件: 用來決定循環(huán)是否繼續(xù)執(zhí)行的, 條件成立, 則循環(huán)繼續(xù)執(zhí)行, 條件不成立, 整個循環(huán)就結束了.
- 控制條件: 用來控制初始化條件變化的, 一般是每循環(huán)一次, 初始化條件+1.
- 循環(huán)體: 需要用來重復做的事情(代碼).
3.2 執(zhí)行流程
- 先執(zhí)行初始化條件.
- 然后執(zhí)行判斷條件, 看其結果是true, 還是false.
- 如果是false, 則整個循環(huán)結束.
- 如果是true, 則執(zhí)行循環(huán)體.
- 執(zhí)行控制條件.
- 返回第2步, 繼續(xù)往下重復執(zhí)行.
簡單理解:
- 第一次執(zhí)行: 1, 2, 3, 4.
假設判斷條件成立.
- 重復執(zhí)行: 2, 3, 4.
- 最后一次執(zhí)行: 2
判斷條件不成立, 循環(huán)結束.
3.3 圖解
3.4 案例一: while循環(huán)入門
需求
在控制臺打印10次HelloWorld
.
參考代碼
public class WhileDemo01 {
public static void main(String[] args) {
int i = 0;
while(i < 10) {
System.out.println("Hello World!");
i++;
}
}
}
3.5 案例二: 求和
需求
獲取1~100之間所有偶數(shù)和, 并將結果打印到控制臺上.
參考代碼
//需求: 獲取1 - 100之間的偶數(shù)和.
public class WhileDemo02 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while (i <= 100) {
if (i % 2 == 0)
sum += i;
i++;
}
System.out.println("1-100之間的偶數(shù)和為: " + sum);
}
}
3.6 案例三: 珠穆朗瑪峰
需求
已知世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米).
假如我有一張足夠大的紙板祝,它的厚度是0.1毫米.
-
請問宫静,我折疊多少次,可以折成珠穆朗瑪峰的高度?
即: 紙張的厚度 >= 珠穆朗瑪峰的高度
參考代碼
//案例: 珠穆朗瑪峰
public class WhileDemo03 {
public static void main(String[] args) {
//1. 定義變量, 記錄紙張的厚度.
double paper = 0.1;
//2. 定義變量, 記錄珠峰的高度.
int zf = 8844430;
//3. 定義變量, 記錄紙張的折疊次數(shù).
int count = 0;
//4. 通過while循環(huán)實現(xiàn), 獲取折疊次數(shù).
while (paper < zf) {
paper *= 2;
count++;
}
//5. 打印結果.
System.out.println("折疊次數(shù)為: " + count);
}
}
4. do.while循環(huán)
do.while循環(huán)在實際開發(fā)中應用到的并不是特別多, 所以我們簡單的了解下它的用法即可.
4.1 格式
初始化條件;
do {
循環(huán)體;
控制條件;
} while(判斷條件);
解釋:
- 初始化條件: 用來記錄 循環(huán)的初始狀態(tài)的. 即: 從哪開始循環(huán).
- 判斷條件: 用來決定循環(huán)是否繼續(xù)執(zhí)行的, 條件成立, 則循環(huán)繼續(xù)執(zhí)行, 條件不成立, 整個循環(huán)就結束了.
- 控制條件: 用來控制初始化條件變化的, 一般是每循環(huán)一次, 初始化條件+1.
- 循環(huán)體: 需要用來重復做的事情(代碼).
4.2 執(zhí)行流程
- 先執(zhí)行初始化條件.
- 再執(zhí)行循環(huán)體.
- 再執(zhí)行控制條件.
- 執(zhí)行判斷條件, 看其結果是true還是false.
- 如果是false, 則整個循環(huán)結束.
- 如果是true, 則返回第2步重復往下執(zhí)行.
簡單理解:
- 第一次執(zhí)行: 1, 2, 3, 4.
假設判斷條件成立.
- 重復執(zhí)行: 2, 3, 4.
- 最后一次執(zhí)行: 2
判斷條件不成立, 循環(huán)結束.
4.3 圖解
4.4 案例: 打印HelloWorld
需求
通過do.while循環(huán), 在控制臺打印10次Hello World!
參考代碼
public class DoWhileDemo01 {
public static void main(String[] args) {
int i = 1;
do{
System.out.println("Hello World! " + i);
i++;
}while(i <= 10);
}
}
5. 循環(huán)擴展
5.1 三種循環(huán)之間的區(qū)別
- do.while循環(huán)和其他兩個循環(huán)之間的區(qū)別
- do.while循環(huán)是先執(zhí)行一次, 后判斷.
- 而其他兩個循環(huán)都是先執(zhí)行判斷條件, 然后決定是否執(zhí)行循環(huán)體.
- for循環(huán)和其他兩個循環(huán)之間的區(qū)別
- for循環(huán)執(zhí)行結束后, 初始化條件就不能繼續(xù)使用了.
- 而其他兩個循環(huán)執(zhí)行結束后, 初始化條件還可以繼續(xù)使用.
5.2 死循環(huán)
5.2.1 概述
所謂的死循環(huán)指的是永不會結束的循環(huán), 也就是循環(huán)的判斷條件永遠為true,
在后期的開發(fā)中券时,會出現(xiàn)使用死循環(huán)的場景,例如:我們需要讀取用戶輸入的輸入橘洞,但是用戶輸入多少數(shù)據(jù)我們并不清楚捌袜,也只能使用死循環(huán),當用戶不想輸入數(shù)據(jù)了震檩,就可以結束循環(huán)了琢蛤,如何去結束一個死循環(huán)呢蜓堕,就需要使用到跳出語句了。
5.2.2 分類
在Java中, 死循環(huán)的寫法格式主要有以下3種:
- for(;;) { }
- while(true){ }
- do { } while(true)
5.2.3 參考代碼
public class DeadLoop {
public static void main(String[] args) {
/*for(;;) {
System.out.println("Hello World!");
}*/
/*while(true) {
System.out.println("Hello World!");
}*/
do {
System.out.println("Hello World!");
} while(true);
}
}
6. 練習
6.1 案例一
需求
按照從大到小的順序輸出四位數(shù)中的個位+百位=十位+千位(3553,2332,1166,8228,3773)的數(shù)字及個數(shù).
每行輸出5個滿足條件的數(shù)博其,之間用空格分隔
如:9999 9988 9977 9966 9955
參考代碼
6.2 案例二
需求
從鍵盤上錄入一個大于100的三位數(shù),求出100到該數(shù)字之間滿足如下要求的數(shù)字之和, 要求如下:
- 數(shù)字的個位數(shù)不為7;
- 數(shù)字的十位數(shù)不為5;
- 數(shù)字的百位數(shù)不為3;
參考代碼