1.流程控制
1.1 概述
在一個(gè)程序執(zhí)行的過程中,各條語句的執(zhí)行順序?qū)Τ绦虻慕Y(jié)果是有直接影響的。所以,我們必須清楚每條語句的執(zhí)行流程。而且,很多時(shí)候要通過控制語句的執(zhí)行順序來實(shí)現(xiàn)我們想要的功能。
例如: 某些代碼是滿足特定條件的情況下, 才會(huì)被執(zhí)行. 而有些代碼, 在滿足某些條件的情況下, 需要重復(fù)執(zhí)行, 這些, 都需要用到流程控制語句.
1.2 分類
- 順序結(jié)構(gòu)
- 選擇結(jié)構(gòu)(if語句, switch.case語句)
- 循環(huán)結(jié)構(gòu)(for循環(huán), while循環(huán), do.while循環(huán))
1.3 順序結(jié)構(gòu)
1.3.1 概念
順序結(jié)構(gòu)指的是代碼是按照從上往下, 從左往右的順序, 依次逐行執(zhí)行的, 且順序結(jié)構(gòu)也是Java程序的默認(rèn)結(jié)構(gòu)
1.3.2 圖解

1.3.3 例子
- 需求:定義一個(gè)類,在類中定義main方法, 打印如下數(shù)據(jù):
//start
//HelloWorld1
//HelloWorld2
//HelloWorld3
//end
- 參考代碼
public class Demo01 {
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");
}
}
1.4 選擇結(jié)構(gòu)
1.4.1 概述
如果我們想某些代碼是在滿足條件的情況下, 才能被執(zhí)行, 此時(shí)就需要用到選擇結(jié)構(gòu)了, 選擇結(jié)構(gòu)也叫分支結(jié)構(gòu), 主要分為以下兩種:
- if語句
- switch.case語句
1.4.2 分類
if語句一般用于范圍的判斷, 例如: 如果當(dāng)前時(shí)間是0~8點(diǎn), 小黑就和你說: 早上好, 如果當(dāng)前時(shí)間是9 ~12點(diǎn), 小黑就和你說: 中午好. 根據(jù)應(yīng)用場景的不同(即: 分支個(gè)數(shù)不同), if語句的格式主要分為以下三種:
- if語句(也叫: 單分支)
- if.else語句(也叫: 雙分支)
- if.else if語句(也叫: 多分支)
1.4.3 單分支
- 單分支結(jié)構(gòu)一般
用來判斷一種情況, 格式如下:
if(關(guān)系表達(dá)式) {
語句體;
}
- 執(zhí)行流程
1.先執(zhí)行關(guān)系表達(dá)式, 看其結(jié)果是true還是false
2.如果是true, 則執(zhí)行大括號(hào)中的語句體
3.如果是false, 則大括號(hào)中的語句體不執(zhí)行 -
圖解
- 例子
需求
定義變量time表示時(shí)間, 如果它的范圍是在[0,8]之間, 就打印早上好, 否則不操作
解釋: [0, 8], 意思是說 0~8之間, 包含0, 也包含8, 這種寫法屬于"前閉后閉"
[0, 8), 意思是: 0~8之間, 包含0, 不包含8, 這種寫法屬于"前閉后開", 也叫: 包左不包右
參考代碼
public class Demo02 {
public static void main(String[] args) {
int time = 5;
if(time >= 0 && time <= 8) {
System.out.println("早上好");
}
}
}
1.4.4 雙分支
- 雙分支結(jié)構(gòu)指的是
if. else語句, 一般用來判斷兩種情況, 格式如下:
if(關(guān)系表達(dá)式) { //if的意思: 如果
//語句體1;
} else { //否則...
//語句體2;
}
- 執(zhí)行流程
1.先執(zhí)行關(guān)系表達(dá)式, 看其結(jié)果是true還是false
2.如果是true, 則執(zhí)行語句體1
3.如果是false, 則執(zhí)行語句體2 -
圖解
- 案例一
需求
定義變量time表示時(shí)間, 如果它的范圍是在0~8之間, 就打印早上好, 否則就打印中午好
參考代碼
public class Demo03 {
public static void main(String[] args) {
int time = 5;
if(time >= 0 && time <= 8) {
System.out.println("早上好");
} else {
System.out.println("中午好");
}
- 案例二: 判斷奇偶數(shù)
需求
提示用戶鍵盤錄入一個(gè)數(shù)據(jù)并接收
判斷該數(shù)據(jù)是奇數(shù)還是偶數(shù), 并將結(jié)果打印到控制臺(tái)上
參考代碼
public class Demo04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請錄入一個(gè)整數(shù): ");
int num = sc.nextInt();
if (num % 2 == 0) {
System.out.println(num + "是偶數(shù)");
} else {
System.out.println(num + "是奇數(shù)");
}
}
}
-
注
1.if語句控制的語句體如果只有一行代碼, 則該大括號(hào)可以省略不寫
例如:
if(5 > 3){
System.out.println("馬上開學(xué)啦!");
}
2.if語句控制的語句體如果只有一行代碼, 則該大括號(hào)可以省略不寫, 定義變量的語法除外
例如:
if(5 > 3){
int a = 10; //這樣寫會(huì)報(bào)錯(cuò), jvm會(huì)識(shí)別這樣代碼為兩行: int a; a = 10;
}
上述的代碼就相當(dāng)于:
if(5 > 3) {
? int a;
a = 10; //這樣寫肯定會(huì)報(bào)錯(cuò)
}
3.你省略if后邊的大括號(hào)時(shí), 有個(gè)問題一定要注意, 不要亂寫分號(hào)
例如:
if(5 > 3) ; //這里如果寫分號(hào)了, 就意味著if語句結(jié)束了.
System.out.println("本意: 這行代碼只有條件成立才會(huì)被執(zhí)行");
1.4.5 多分支
- 多分支結(jié)構(gòu)指的是
if. else if語句, 一般用來判斷多種情況, 格式如下:
if(關(guān)系表達(dá)式1) {
//語句體1;
} else if(關(guān)系表達(dá)式2){
//語句體2;
} else if(關(guān)系表達(dá)式3){ //這里可以根據(jù)需求, 有多個(gè)else if語句
//語句體3;
} else {
//語句體n;
}
- 執(zhí)行流程
1.先執(zhí)行關(guān)系表達(dá)式1, 看其結(jié)果是true還是false
2.如果是true, 則執(zhí)行語句體1, 整個(gè)if語句結(jié)束
3.如果是false, 則判斷關(guān)系表達(dá)式2, 看其結(jié)果是true還是false
4.如果是true, 則執(zhí)行語句體2, 整個(gè)if語句結(jié)束
5.如果是false, 則判斷關(guān)系表達(dá)式3, ...以此類推
6.如果所有的關(guān)系表達(dá)式都不成立, 則執(zhí)行else語句的語句體n, 整個(gè)if語句結(jié)束 -
圖解
- 案例一: 打印星期
需求
提示用戶錄入[1, 7]之間的數(shù)字, 并接收.
根據(jù)用戶錄入的數(shù)字, 打印對應(yīng)的星期, 格式如下:
用戶錄入1, 打印"星期一"
用戶錄入2, 打印"星期二"
...以此類推
用戶錄入非法數(shù)字, 打印"沒有這樣的日期
參考代碼
package com.company;
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) {
// 提示用戶錄入[1, 7]之間的數(shù)字, 并接收.
System.out.println("請輸入一個(gè)整數(shù)數(shù)字:");
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
System.out.println("您輸入的整數(shù)數(shù)字為:" +data);
// 根據(jù)用戶錄入的數(shù)字, 打印對應(yīng)的星期, 格式如下:
// 用戶錄入1, 打印"星期一"
// 用戶錄入2, 打印"星期二"
//...以此類推
if(data == 1){
System.out.println("今天是星期一");
}
else if(data == 2){
System.out.println("今天是星期二");
}
else if(data == 3){
System.out.println("今天是星期三");
}
else if(data == 4){
System.out.println("今天是星期四");
}
else if(data == 5){
System.out.println("今天是星期五");
}
else if(data == 6){
System.out.println("今天是星期六");
}
else if(data == 7){
System.out.println("今天是星期天");
}
// 用戶錄入非法數(shù)字, 打印"沒有這樣的日期"
else{
System.out.println("沒有這樣的日期");
}
}
}
- 案例二: 發(fā)放獎(jiǎng)勵(lì)
需求
小明快要期末考試了,小明爸爸對他說,會(huì)根據(jù)他的考試成績,送他不同的禮物.
假如你可以控制小明的得分,請用程序?qū)崿F(xiàn)小明到底該獲得什么樣的禮物,并在控制臺(tái)輸出。
禮物標(biāo)準(zhǔn)如下:
95~100 山地自行車一輛
90~94 游樂場玩一次
80~89 變形金剛玩具一個(gè)
80以下 胖揍一頓
參考代碼
package com.company;
import java.util.Scanner;
public class Test11 {
public static void main(String[] args) {
System.out.println("請輸入小明的考試成績:");
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if(score > 100 || score < 0){
System.out.println("請輸入合法成績");
}
else if(score <=100 && score >= 95){
System.out.println("老爸獎(jiǎng)勵(lì)小明山地自行車一輛");
}
else if(score <=94 && score >= 90){
System.out.println("老爸領(lǐng)小明去游樂場玩一次");
}
else if(score <=89 && score >= 80){
System.out.println("老爸獎(jiǎng)勵(lì)小明變形金剛玩具一個(gè)");
}
else{
System.out.println("恭喜小明,成功引起老爸注意,被胖揍一頓");
}
}
}
- 案例三: 獲取最大值
需求
提示用戶錄入3個(gè)整數(shù), 并接收
通過if語句獲取這三個(gè)整數(shù)的最大值
將結(jié)果打印到控制臺(tái)上
參考代碼
import java.util.Scanner;
public class Demo06 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請錄入第一個(gè)整數(shù): ");
int a = sc.nextInt();
System.out.println("請錄入第二個(gè)整數(shù): ");
int b = sc.nextInt();
System.out.println("請錄入第三個(gè)整數(shù): ");
int c = sc.nextInt();
//方式一: if嵌套實(shí)現(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語句實(shí)現(xiàn)
if (a > b && a > c) {
max2 = a;
} else if(b > a && b > c) {
max2 = b;
} else {
max2 = c;
}
System.out.println("最大值: " + max2);
}
}
1.4.6 switch語句
- 概述
switch語句, 一般是用于做
固定值判斷的, 在實(shí)際開發(fā)中, 用到的頻率也非常高
- 格式
switch(表達(dá)式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
case 值3:
語句體3;
break;
... //根據(jù)需求, 可以寫多組case.
default:
語句體n;
break;
}
-
格式詳解
- 執(zhí)行流程
1.先計(jì)算表達(dá)式的值, 然后按照從上往下的順序依次和每一個(gè)case對應(yīng)的值相匹配
2.如果能匹配成功, 則執(zhí)行該case對應(yīng)的語句體, 然后執(zhí)行break, 至此, 整個(gè)switch語句結(jié)束
3.如果和所有的case值都不匹配, 則執(zhí)行default對應(yīng)的語句體, 然后執(zhí)行break, 至此, 整個(gè)switch語句結(jié)束
解釋: default語句就類似于
if. else語句中的else, 當(dāng)所有條件都不滿足時(shí)才會(huì)執(zhí)行
-
執(zhí)行流程圖解
- 示例一: 春夏秋冬
需求
一年有12個(gè)月, 分屬于春夏秋冬4個(gè)季節(jié), 鍵盤錄入一個(gè)月份, 請用程序?qū)崿F(xiàn)判斷該月份屬于哪個(gè)季節(jié), 并輸出。
具體標(biāo)準(zhǔn)如下:
輸入: 1、2、12 輸出:冬季
輸入: 3、4、5 輸出:春季
輸入: 6、7、8 輸出:夏季
輸入: 9、10、11 輸出:秋季
輸入:其它數(shù)字 輸出:數(shù)字有誤
參考代碼
import java.util.Scanner;
public class Demo07 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請錄入一個(gè)月份: ");
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;
}
}
}
1.4.7 case穿透
- 概述
在switch語句中,如果case的后面不寫break,將出現(xiàn)case穿透現(xiàn)象,也就是不會(huì)在判斷下一個(gè)case的值,直接向后運(yùn)行,直到遇到break,或者整體switch結(jié)束
- 格式
switch(表達(dá)式) {
case 值1:
語句體1; //假設(shè)表達(dá)式的值 = 值1, 則執(zhí)行完語句體1后, 不會(huì)判斷第二個(gè)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 Demo08 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請錄入一個(gè)月份: ");
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;
}
}
}
思考題
1.switch語句的小括號(hào)中, 可以放什么?
switch(),這個(gè)括號(hào)里面一般表示的是整數(shù),包括,short,byte和int類型,char和String類型也可以,但是long類型和浮點(diǎn)型的小數(shù)就不能往這里放了
2.default語句必須放到switch語句的最后嗎?
default語句不是必須放在case語句的結(jié)尾處出現(xiàn) switch的執(zhí)行是按照從小到大的順序執(zhí)行的,最后執(zhí)行default語句, 如果default后面帶有break,那么程序就會(huì)正常跳出switch,否則, 程序會(huì)繼續(xù)向后執(zhí)行switch語句!也就是說,不管default放在什么 位置,它總是在最后一個(gè)處理,然后繼續(xù)向下處理! 所以,最后的處理辦法,避免出現(xiàn)以外結(jié)果的最好辦法就是每一個(gè)case 以及default語句都要加一個(gè)break!
3.break關(guān)鍵字可以省略嗎? 對執(zhí)行結(jié)果是否有影響?
可以
在switch語句中,如果case的后面不寫break,將出現(xiàn)case穿透現(xiàn)象,也就是不會(huì)在判斷下一個(gè)case的值,直接向后運(yùn)行,直到遇到break,或者整體switch結(jié)束案例:發(fā)放獎(jiǎng)勵(lì)
需求
1.小明快要期末考試了,小明爸爸對他說,會(huì)根據(jù)他的考試成績,送他不同的禮物.
2.假如你可以控制小明的得分,請用程序?qū)崿F(xiàn)小明到底該獲得什么樣的禮物,并在控制臺(tái)輸出。
3.禮物標(biāo)準(zhǔn)如下:
90~100 山地自行車一輛
80~89 游樂場玩一次
70~79 變形金剛玩具一個(gè)
70以下 胖揍一頓
參考代碼
package com.company;
import java.util.Scanner;
public class Test14 {
public static void main(String[] args) {
System.out.println("請輸入小明的考試成績:");
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if (score >= 0 && score <= 100) {
switch (score / 10) {
case 10:
case 9:
System.out.println("老爸獎(jiǎng)勵(lì)小明山地自行車一輛");
break;
case 8:
System.out.println("老爸領(lǐng)小明去游樂場玩一次");
break;
case 7:
System.out.println("老爸獎(jiǎng)勵(lì)小明變形金剛玩具一個(gè)");
break;
default:
System.out.println("恭喜小明,成功引起老爸注意,被胖揍一頓");
break;
}
}
else{
System.out.println("請輸入合法成績");
}
}
}
1.4.8 練習(xí)題
- 案例一: 漲工資
需求
根據(jù)工齡(整數(shù))給員工漲工資(整數(shù)), 工齡和基本工資通過鍵盤錄入
漲工資的條件如下:
[10-15) +5000
[5-10) +2500
[3~5) +1000
[1~3) +500
[0~1) +200
打印格式
您目前工作了10年,基本工資為 3000元, 應(yīng)漲工資 5000元,漲后工資 8000元
參考代碼
package com.company;
import java.util.Scanner;
public class Test15 {
public static void main(String[] args) {
System.out.println("請輸入工齡:");
Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
System.out.println("請輸入基本工資:");
Scanner scc = new Scanner(System.in);
int money = scc.nextInt();
int add_money;
int money_money;
if(age >= 0 && age < 15){
switch(age){
case 14:
case 13:
case 12:
case 11:
case 10:
add_money = 5000;
money_money = money + add_money;
System.out.println("您目前工作了"+age+"年,基本工資為"+money+"元,應(yīng)漲工資"+add_money+"元," +
"漲后工資"+money_money+"元");
break;
case 9:
case 8:
case 7:
case 6:
case 5:
add_money = 2500;
money_money = money + add_money;
System.out.println("您目前工作了"+age+"年,基本工資為"+money+"元,應(yīng)漲工資"+add_money+"元," +
"漲后工資"+money_money+"元");
break;
case 4:
case 3:
add_money = 1000;
money_money = money + add_money;
System.out.println("您目前工作了"+age+"年,基本工資為"+money+"元,應(yīng)漲工資"+add_money+"元," +
"漲后工資"+money_money+"元");
break;
case 2:
case 1:
add_money = 500;
money_money = money + add_money;
System.out.println("您目前工作了"+age+"年,基本工資為"+money+"元,應(yīng)漲工資"+add_money+"元," +
"漲后工資"+money_money+"元");
break;
default:
add_money = 200;
money_money = money + add_money;
System.out.println("您目前工作了"+age+"年,基本工資為"+money+"元,應(yīng)漲工資"+add_money+"元," +
"漲后工資"+money_money+"元");
break;
}
}
else{
System.out.println("請輸入合法工齡");
}
}
}
- 案例二: 定義計(jì)算器
需求
1.功能描述:模擬計(jì)算器功能,對鍵盤錄入的兩個(gè)int類型的數(shù)據(jù)進(jìn)行加、減、乘、除的運(yùn)算,并打印運(yùn)算結(jié)果
2.要求:
(1)鍵盤錄入三個(gè)整數(shù),其中前兩個(gè)整數(shù)代表參加運(yùn)算的數(shù)據(jù),
第三個(gè)整數(shù)為要進(jìn)行的運(yùn)算(0:表示加法運(yùn)算,1:表示減法運(yùn)算,2:表示乘法運(yùn)算,3:表示除法運(yùn)算)
(2)使用今天所學(xué)知識(shí)完成功能
(3)演示格式如下:
請輸入第一個(gè)整數(shù):30
請輸入第二個(gè)整數(shù):40
請輸入您要進(jìn)行的運(yùn)算(0:表示加法運(yùn)算,1:表示減法運(yùn)算,2:表示乘法運(yùn)算,3:表示除法運(yùn)算):0
控制臺(tái)輸出:30+40=70
參考代碼
package com.company;
import java.util.Scanner;
/**
* @author Liu
* @date 2020/4/12 15:17
*/
public class Test16 {
public static void main(String[] args) {
System.out.println("請輸入第一個(gè)整數(shù):");
Scanner sc = new Scanner(System.in);
int a=sc.nextInt();
System.out.println("請輸入第二個(gè)整數(shù):");
Scanner scc = new Scanner(System.in);
int b=scc.nextInt();
System.out.println("請輸入您要進(jìn)行的計(jì)算(0:表示加法運(yùn)算,1:表示減法運(yùn)算,2:表示乘法運(yùn)算,3:表示除法運(yùn)算)");
Scanner sccc = new Scanner(System.in);
int c=sccc.nextInt();
if (c == 0){
System.out.println("a + b ="+(a+b));
}else if(c == 1){
System.out.println("a - b ="+(a-b));
}else if(c == 2){
System.out.println("a * b ="+(a*b));
}else if(c == 3){
System.out.println("a / b ="+(a/b));
}else{
System.out.println("請輸入正確的值");
}
}
}
- 案例三: 水仙花數(shù)
需求
鍵盤錄入一個(gè)三位數(shù)字,輸出該三位數(shù)字是否是水仙花數(shù)字?
水仙花數(shù)字要求: 指的是一個(gè)三位數(shù),個(gè)位、十位、百位的數(shù)字立方和等于原數(shù)
例如 153 333 + 555 + 111 = 27 + 125 + 1 = 153
實(shí)現(xiàn)步驟
1.創(chuàng)建鍵盤錄入對象
2.獲取一個(gè)int數(shù)字
3.獲取個(gè)位,十位,百位
4.求個(gè)位,十位,百位的立方和
5.利用if語句判斷立方和是否等于該數(shù)字本身,并輸出結(jié)果
參考代碼
package com.company;
import java.util.Scanner;
/**
* @author Liu
* @date 2020/4/12 15:38
*/
public class Test17 {
public static void main(String[] args) {
System.out.println("請輸入一個(gè)三位整數(shù):");
Scanner sc = new Scanner(System.in);
int s=sc.nextInt();
if (s >= 100 || s < 100) {
int a1 = s / 100;
int b1 = (s % 100) / 10;
int c1 = s % 10;
int s1 = (a1 * a1 * a1) + (b1 * b1 * b1) + (c1 * c1 * c1);
if (s == s1) {
System.out.println("" + s + "是水仙花數(shù)");
} else {
System.out.println("" + s + "不是水仙花數(shù)");
}
}else{
System.out.println("請輸入一個(gè)三位整數(shù)");
}
}
}
1.5 循環(huán)結(jié)構(gòu)
- 概述
循環(huán),即事物周而復(fù)始的變化。循環(huán)結(jié)構(gòu)指的是,使一部分代碼按照次數(shù)或一定的條件反復(fù)執(zhí)行的一種代碼結(jié)構(gòu). 有些時(shí)候, 我們想代碼是在滿足某些條件的情況下, 重復(fù)(循環(huán))執(zhí)行的, 就需要用到循環(huán)結(jié)構(gòu)了.
例如: 打印100次HelloWorld. 如果不用循環(huán)實(shí)現(xiàn)的話, 輸出語句我們就需要寫100次, 我們發(fā)現(xiàn)這樣做是非常繁瑣的. 于是, 我們可以通過循環(huán)來優(yōu)化它.
-
組成
1.初始化條件
假設(shè)用
int類型的變量x記錄循環(huán)次數(shù),x從1開始數(shù), 數(shù)到100剛好100次,1在這里充當(dāng)?shù)慕巧褪? 初始化條件
2.判斷條件
變量x從1開始數(shù), 數(shù)到100結(jié)束. 即: x <= 100, 這就是判斷條件, 用來決定循環(huán)是否繼續(xù)執(zhí)行的
3.循環(huán)體
指的是需要重復(fù)執(zhí)行的代碼, 例如: System.out.println("Hello World!");
- 分類
1.for循環(huán)
一般適用于循環(huán)
次數(shù)固定的情況
2.while循環(huán)
一般適用于循環(huán)
次數(shù)不固定的情況
3.do.while循環(huán)
我們在實(shí)際開發(fā)中, 基本不用. 適用于
先執(zhí)行一次, 然后判斷的情況
1.5.1 for循環(huán)
- for循環(huán)是我們在實(shí)際開發(fā)中應(yīng)用到的最多的循環(huán), 它一般適用于
循環(huán)次數(shù)固定的情況 - 格式
for(初始化條件1; 判斷條件2; 控制條件3) {
//循環(huán)體4;
}
解釋:
1.初始化條件: 用來記錄 循環(huán)的初始狀態(tài)的. 即: 從哪開始循環(huán).
2.判斷條件: 用來決定循環(huán)是否繼續(xù)執(zhí)行的, 條件成立, 則循環(huán)繼續(xù)執(zhí)行, 條件不成立, 整個(gè)循環(huán)就結(jié)束了.
3.控制條件: 用來控制初始化條件變化的, 一般是每循環(huán)一次, 初始化條件+1.
4.循環(huán)體: 需要用來重復(fù)做的事情(代碼).
- 執(zhí)行流程
1.先執(zhí)行初始化條件
2.然后執(zhí)行判斷條件, 看其結(jié)果是true, 還是false
3.如果是false, 則整個(gè)循環(huán)結(jié)束
4.如果是true, 則執(zhí)行循環(huán)體
5.執(zhí)行控制條件
6.返回第2步, 繼續(xù)往下重復(fù)執(zhí)行
簡單理解:
1.第一次執(zhí)行: 1, 2, 4, 3.假設(shè)判斷條件成立
2.重復(fù)執(zhí)行: 2, 4, 3.
3.最后一次執(zhí)行: 2判斷條件不成立, 循環(huán)結(jié)束
-
圖解
- 案例一:for循環(huán)入門
需求
通過for循環(huán), 打印10次"Hello World!"
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 8:57
*/
public class LianXi01 {
public static void main(String[] args) {
for (int i = 0 ; i < 10 ; i++){
System.out.println("Hello World!");
}
}
}
- 案例二: 打印數(shù)字
需求
1.通過for循環(huán), 打印1~5之間的數(shù)字
2.通過for循環(huán), 打印5~1之間的數(shù)字
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 8:59
*/
public class LianXi02 {
public static void main(String[] args) {
// 通過for循環(huán), 打印1~5之間的數(shù)字
for ( int i = 1; i <= 5; i++){
System.out.println(i);
}
// 通過for循環(huán), 打印5~1之間的數(shù)字
for (int i = 5; i > 0; i--){
System.out.println(i);
}
}
}
- 案例三: 求和案例
需求
通過for循環(huán), 獲取1 ~ 5之間的數(shù)字之和
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 9:03
*/
public class LianXi03 {
public static void main(String[] args) {
// 通過for循環(huán), 獲取1 ~ 5之間的數(shù)字之和.
int sum = 0;
for ( int i = 1; i <= 5; i++){
sum = sum+ i;
}
System.out.println(sum);
}
}
細(xì)節(jié): 求和變量必須定義到for循環(huán)的外邊, 如果定義到for循環(huán)的內(nèi)容, 則每次循環(huán)都會(huì)被重置
- 案例四: 求偶數(shù)和
需求
求1-100之間的偶數(shù)和,并把求和結(jié)果打印到控制臺(tái)上
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 9:08
*/
public class LianXi04 {
public static void main(String[] args) {
//求1-100之間的偶數(shù)和,并把求和結(jié)果打印到控制臺(tái)上
int sum = 0;
for (int i = 1; i <= 100; i++){
if (i % 2 == 0){
sum += i;
}
}
System.out.println(sum);
}
}
- 案例五: 獲取水仙花數(shù)
需求
獲取到所有的水仙花數(shù), 并將結(jié)果打印到控制臺(tái)上
解釋:
水仙花數(shù)是一個(gè)3位數(shù)的整數(shù).
該數(shù)字的各個(gè)位數(shù)立方和相加等于它本身.
例如: 153就是水仙花數(shù), 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 = 153
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 9:12
*/
public class ForLianXi05 {
public static void main(String[] args) {
//獲取到所有的水仙花數(shù), 并將結(jié)果打印到控制臺(tái)上
int ge,shi,bai;
for(int i = 100;i < 1000; i++){
ge = i % 10;
shi = i % 100 / 10;
bai = i /100;
if (i == ge*ge*ge +shi*shi*shi + bai*bai*bai){
System.out.println(i);
}
}
}
}
- 案例六: 計(jì)數(shù)思想
需求
統(tǒng)計(jì)所有水仙花數(shù)的個(gè)數(shù), 并將其打印到控制臺(tái)上
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 9:18
*/
public class ForLianXi06 {
public static void main(String[] args) {
//統(tǒng)計(jì)所有水仙花數(shù)的個(gè)數(shù), 并將其打印到控制臺(tái)上
int ge,shi,bai;
int count = 0;
for(int i = 100;i < 1000; i++){
ge = i % 10;
shi = i % 100 / 10;
bai = i /100;
if (i == ge*ge*ge +shi*shi*shi + bai*bai*bai){
count += 1;
System.out.println(i);
}
}
System.out.println("水仙花的個(gè)數(shù)為"+count+"");
}
}
- 案例七: 求和 + 計(jì)數(shù)
需求
獲取1 - 100之間的奇數(shù)和, 以及奇數(shù)的個(gè)數(shù)
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 9:25
*/
public class ForLianXi07 {
public static void main(String[] args) {
//獲取1 - 100之間的奇數(shù)和, 以及奇數(shù)的個(gè)數(shù)
int sum = 0;
int count = 0;
for(int i = 1;i <= 100;i++){
if (i % 2 == 1){
sum += i;
count += 1;
}
}
System.out.println("1 - 100之間的奇數(shù)和:"+ sum);
System.out.println("奇數(shù)的個(gè)數(shù):"+count);
}
}
- 案例八: 換行輸出
需求
把1~100之間的數(shù)字, 按照6個(gè)一行的格式進(jìn)行輸出
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 9:30
*/
public class ForLianXi08 {
public static void main(String[] args) {
//把1~100之間的數(shù)字, 按照6個(gè)一行的格式進(jìn)行輸出
int count = 0;
for (int i = 1; i <= 100; i++) {
System.out.print(i+"\t");
count += 1;
if (count % 6 == 0) {
System.out.println();
}
}
}
}
1.5.2 while循環(huán)
- while循環(huán)也是我們在實(shí)際開發(fā)中應(yīng)用到的比較多的循環(huán), 它一般適用于
循環(huán)次數(shù)不固定的情況 - 格式
初始化條件1;
while(判斷條件2) {
//循環(huán)體3;
//控制條件4;
}
解釋:
1.初始化條件: 用來記錄 循環(huán)的初始狀態(tài)的. 即: 從哪開始循環(huán).
2.判斷條件: 用來決定循環(huán)是否繼續(xù)執(zhí)行的, 條件成立, 則循環(huán)繼續(xù)執(zhí)行, 條件不成立, 整個(gè)循環(huán)就結(jié)束了.
3.控制條件: 用來控制初始化條件變化的, 一般是每循環(huán)一次, 初始化條件+1.
4.循環(huán)體: 需要用來重復(fù)做的事情(代碼).
- 執(zhí)行流程
1.先執(zhí)行初始化條件
2.然后執(zhí)行判斷條件, 看其結(jié)果是true, 還是false
3.如果是false, 則整個(gè)循環(huán)結(jié)束
4.如果是true, 則執(zhí)行循環(huán)體
5.執(zhí)行控制條件
6.返回第2步, 繼續(xù)往下重復(fù)執(zhí)行
簡單理解:
第一次執(zhí)行: 1, 2, 3, 4.假設(shè)判斷條件成立
重復(fù)執(zhí)行: 2, 3, 4.
最后一次執(zhí)行: 2判斷條件不成立, 循環(huán)結(jié)束
-
圖解
- 案例一: while循環(huán)入門
需求
在控制臺(tái)打印10次HelloWorld
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 9:43
*/
public class WhileLianXi01 {
public static void main(String[] args) {
//在控制臺(tái)打印10次HelloWorld
int i = 0;
while(i < 10){
System.out.println("HelloWorld");
i++;
}
}
}
- 案例二: 求和
需求
獲取1~100之間所有偶數(shù)和, 并將結(jié)果打印到控制臺(tái)上
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 9:46
*/
public class WhileLianXi02 {
public static void main(String[] args) {
//獲取1~100之間所有偶數(shù)和, 并將結(jié)果打印到控制臺(tái)上
int i = 1;
int sum = 0;
while(i <= 100){
if(i % 2 == 0){
sum += i;
}
i++;
}
System.out.println(sum);
}
}
- 案例三: 珠穆朗瑪峰
需求
1.已知世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米).
2.假如我有一張足夠大的紙,它的厚度是0.1毫米.
3.請問,我折疊多少次,可以折成珠穆朗瑪峰的高度?
即: 紙張的厚度 >= 珠穆朗瑪峰的高度
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 9:50
*/
public class WhileLianXi03 {
public static void main(String[] args) {
//已知世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米).
//假如我有一張足夠大的紙,它的厚度是0.1毫米.
//請問,我折疊多少次,可以折成珠穆朗瑪峰的高度?
//即: 紙張的厚度 >= 珠穆朗瑪峰的高度
double weight = 0.1;
int hight = 8844430;
int count = 0;
while(weight <= hight){
weight *= 2;
count++;
}
System.out.println("需要折疊"+count+"次");
}
}
1.5.3 do.while循環(huán)
- do.while循環(huán)在實(shí)際開發(fā)中應(yīng)用到的并不是特別多, 所以我們簡單的了解下它的用法即可
- 格式
初始化條件;
do {
循環(huán)體;
控制條件;
} while(判斷條件);
解釋:
1.初始化條件: 用來記錄 循環(huán)的初始狀態(tài)的. 即: 從哪開始循環(huán)
2.判斷條件: 用來決定循環(huán)是否繼續(xù)執(zhí)行的, 條件成立, 則循環(huán)繼續(xù)執(zhí)行, 條件不成立, 整個(gè)循環(huán)就結(jié)束了
3.控制條件: 用來控制初始化條件變化的, 一般是每循環(huán)一次, 初始化條件+1
4.循環(huán)體: 需要用來重復(fù)做的事情(代碼)
- 執(zhí)行流程
1.先執(zhí)行初始化條件
2.再執(zhí)行循環(huán)體
3.再執(zhí)行控制條件
4.執(zhí)行判斷條件, 看其結(jié)果是true還是false
5.如果是false, 則整個(gè)循環(huán)結(jié)束
6.如果是true, 則返回第2步重復(fù)往下執(zhí)行
簡單理解:
第一次執(zhí)行: 1, 2, 3, 4.假設(shè)判斷條件成立
重復(fù)執(zhí)行: 2, 3, 4.
最后一次執(zhí)行: 2判斷條件不成立, 循環(huán)結(jié)束
-
圖解
- 案例: 打印HelloWorld
需求
通過do.while循環(huán), 在控制臺(tái)打印10次Hello World
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 10:01
*/
public class DoWhileLianXi01 {
public static void main(String[] args) {
//通過do.while循環(huán), 在控制臺(tái)打印10次Hello World!
int i = 1;
do {
System.out.println("HelloWorld");
i++;
}while(i <= 10);
}
}
1.5.4 循環(huán)擴(kuò)展
-
- 三種循環(huán)之間的區(qū)別
- do.while循環(huán)和其他兩個(gè)循環(huán)之間的區(qū)別
- do.while循環(huán)是先執(zhí)行一次, 后判斷
- 而其他兩個(gè)循環(huán)都是先執(zhí)行判斷條件, 然后決定是否執(zhí)行循環(huán)體
- for循環(huán)和其他兩個(gè)循環(huán)之間的區(qū)別
- for循環(huán)執(zhí)行結(jié)束后, 初始化條件就不能繼續(xù)使用了
- 而其他兩個(gè)循環(huán)執(zhí)行結(jié)束后, 初始化條件還可以繼續(xù)使用
- 死循環(huán)
概述
所謂的死循環(huán)指的是永不會(huì)結(jié)束的循環(huán), 也就是循環(huán)的判斷條件永遠(yuǎn)為true
在后期的開發(fā)中,會(huì)出現(xiàn)使用死循環(huán)的場景,例如:我們需要讀取用戶輸入的輸入,但是用戶輸入多少數(shù)據(jù)我們并不清楚,也只能使用死循環(huán),當(dāng)用戶不想輸入數(shù)據(jù)了,就可以結(jié)束循環(huán)了,如何去結(jié)束一個(gè)死循環(huán)呢,就需要使用到跳出語句了。
分類
在Java中, 死循環(huán)的寫法格式主要有以下3種:
1.for(;;) { }
2.while(true){ }
3.do { } while(true)
- 參考代碼
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);
}
}
2.關(guān)系運(yùn)算符
2.1 概述
關(guān)系運(yùn)算符就是用來描述兩個(gè)變量或者常量之間的關(guān)系主要分為以下6種:
| 符號(hào) | 說明 |
|---|---|
== |
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 |
2.2 注意事項(xiàng)
- 關(guān)系運(yùn)算符的結(jié)果都是boolean類型,要么是true,要么是false
- 千萬不要把
==寫成了=, 否則結(jié)果可能不是你想要的
2.3 案例
需求
1.定義兩個(gè)int類型的變量a和b, 分別賦值為10和5
2.通過關(guān)系運(yùn)算符比較這兩個(gè)變量之間的關(guān)系, 并打印結(jié)果
參考代碼
public class Demo11 {
public static void main(String[] args) {
//定義兩個(gè)int類型的變量a和b, 分別賦值為10和5.
int a = 10;
int b = 5;
//通過`關(guān)系運(yùn)算符`比較這兩個(gè)變量之間的關(guān)系, 并打印結(jié)果.
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);
//關(guān)系運(yùn)算符的最終結(jié)果是boolean類型, 所以我們也可以用boolean類型的變量接收.
boolean flag = 10 < 5;
System.out.println(flag);
}
}
3.邏輯運(yùn)算符
3.1 概述
- 邏輯運(yùn)算符是用來判斷并且, 或者, 除非等邏輯關(guān)系的符號(hào)
- 該符號(hào)兩端一般連接值為布爾類型的關(guān)系表達(dá)式
例如: 某企業(yè)招工, 要求年齡必須在 20 ~ 65歲之間
3.2 分類
注意: 假設(shè)下表中的a和b, 都是boolean類型的值

小技巧:
對一個(gè)布爾數(shù)據(jù), 偶數(shù)次取反, 該數(shù)據(jù)值不變
!true = false
3.3 示例: 邏輯運(yùn)算符入門
需求
1.定義三個(gè)int類型的變量a, b, c, 它們的初始化值分別為10, 20, 30.
2.通過上述的三個(gè)變量, 演示各個(gè)邏輯運(yùn)算符
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 10:09
*/
public class LuoJiLianxi01 {
public static void main(String[] args) {
//定義三個(gè)int類型的變量a, b, c, 它們的初始化值分別為10, 20, 30.
//通過上述的三個(gè)變量, 演示各個(gè)邏輯運(yùn)算符.
int a = 10, b = 20, c = 30;
//&: 邏輯與, 并且的意思, 有false則整體為false.
//相當(dāng)于: 班長找女朋友, 要求長得漂亮, 并且身材好.
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.
//相當(dāng)于: 降低條件了, 要么長得漂亮, 要么身材好.
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("-----------------");
//!: 邏輯非, 取反的意思
//相當(dāng)于: 只要不是男的就行.
System.out.println(!(a > b)); //!false
System.out.println(!(a < b)); //!true
System.out.println("-----------------");
//邏輯異或, 異同的意思, 相同為false, 不同為true.
//相當(dāng)于: 最后還是找了個(gè)男的, 但是領(lǐng)不了證.
//法律規(guī)定: 一夫一妻, 一男一女, 必須是異性才能領(lǐng)證.
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
}
}
3.4 短路邏輯運(yùn)算符
在實(shí)際開發(fā)中, 并且, 或者這樣的操作是非常多的, 但是上述的&(邏輯與), !(邏輯或)運(yùn)算符沒有短路效應(yīng), 所以效率相對較低, 針對這種情況, 我們可以使用&&(短路與), ||(短路或)來優(yōu)化
3.4.1 格式

3.4.2 解釋
- 在
短路與運(yùn)算中,只要有一個(gè)表達(dá)式的值為false,那么結(jié)果就可以判定為false了,沒有必要將所有表達(dá)式的值都計(jì)算出來,短路與運(yùn)算符就有這樣的效果,可以提高效率。 - 同理在
短路或運(yùn)算中,一旦發(fā)現(xiàn)值為true,右邊的表達(dá)式將不再參與運(yùn)算。
3.4.3 短路和非 短路的區(qū)別
+邏輯與 和 短路與之間的區(qū)別
- 邏輯與&(也叫單與): 無論左邊真假,右邊都要執(zhí)行。
- 短路與&&(也叫雙與): 如果左邊為真,右邊執(zhí)行;如果左邊為假,右邊不執(zhí)行。
- 邏輯或 和 短路或之間的區(qū)別
- 邏輯或|(也叫單或): 無論左邊真假,右邊都要執(zhí)行。
- 短路或||(也叫雙或): 如果左邊為假,右邊執(zhí)行;如果左邊為真,右邊不執(zhí)行。
- 記憶: 在實(shí)際開發(fā)中, 我們用的最多的邏輯運(yùn)算符就是: &&, ||, !
3.4.4案例
package com.company;
/**
* @author Liu
* @date 2020/4/14 10:11
*/
public class LuoJiLianxi02 {
public static void main(String[] args) {
//1. 定義兩個(gè)int類型的變量a和b, 初始化值分別為: 2, 5
int a = 2, b = 5;
//2. 演示邏輯與(&)
/* System.out.println((a++ > 2) & (b++ < 7)); //兩個(gè)表達(dá)式都會(huì)執(zhí)行.
System.out.println(a);
System.out.println(b);*/
System.out.println("------------------");
//3. 演示短路與(&&)
System.out.println((a++ > 2) && (b++ < 7)); //左邊表達(dá)式結(jié)果為false, 右邊不執(zhí)行.
System.out.println(a);
System.out.println(b);
}
}
4.三元運(yùn)算符
4.1 概述
三元運(yùn)算符也叫三目運(yùn)算符,即由三部分組成,格式如下:
(關(guān)系表達(dá)式) ? 表達(dá)式1:表達(dá)式2;
4.2 執(zhí)行流程
1.先執(zhí)行關(guān)系表達(dá)式, 看其結(jié)果是true還是false.
2.如果是true, 則執(zhí)行表達(dá)式1
3.如果是false, 則執(zhí)行表達(dá)式2
4.3案例一: 入門案例
需求
1.定義兩個(gè)int類型的變量a. b, 初始化值分別為10, 20
2.通過三元運(yùn)算符, 獲取變量a和b的最大值.
3.將結(jié)果(最大值)打印到控制臺(tái)上.
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 10:14
*/
public class LuoJiLianxi03 {
public static void main(String[] args) {
//定義兩個(gè)int類型的變量a. b, 初始化值分別為10, 20
//通過三元運(yùn)算符, 獲取變量a和b的最大值.
//將結(jié)果(最大值)打印到控制臺(tái)上.
//(關(guān)系表達(dá)式) ? 表達(dá)式1:表達(dá)式2;
int a = 10;
int b = 20;
int max = a < b ? b : a;
System.out.println(max);
}
}
4.4 案例二: 判斷老虎體重
需求
動(dòng)物園里有兩只老虎,已知兩只老虎的體重分別為180kg、200kg,請用程序?qū)崿F(xiàn)判斷兩只老虎的體重是否相同。
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 10:19
*/
public class LuoJiLianxi04 {
public static void main(String[] args) {
//動(dòng)物園里有兩只老虎,已知兩只老虎的體重分別為180kg、200kg,
// 請用程序?qū)崿F(xiàn)判斷兩只老虎的體重是否相同
int a = 180;
int b = 200;
boolean flag = a == b ? true : false;
System.out.println(flag);
}
}
4.5 案例三: 獲取和尚的最高身高
需求
1.一座寺廟里住著三個(gè)和尚,已知他們的身高分別為150cm、210cm、165cm.
2.請用程序?qū)崿F(xiàn)獲取這三個(gè)和尚的最高身高。
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 10:24
*/
public class LuoJiLianxi05 {
public static void main(String[] args) {
//一座寺廟里住著三個(gè)和尚,已知他們的身高分別為150cm、210cm、165cm
//請用程序?qū)崿F(xiàn)獲取這三個(gè)和尚的最高身高
int a = 150;
int b = 210;
int c = 165;
int i = a > b ? a : b;
int max = i > c ? i : c;
System.out.println(max);
}
}
5.鍵入
5.1 概述
之前我們涉及到的數(shù)據(jù)都是寫死的, 固定的數(shù)據(jù), 這樣做用戶體驗(yàn)并不好, 我們就想著, 能不能讓用戶錄入數(shù)據(jù), 我們通過特定的代碼來接收, 這樣做就非常好玩了, 針對于這種情況, 我們可以通過鍵盤錄入來實(shí)現(xiàn)
即: Java中鍵盤錄入功能指的就是Scanner類, 我們可以通過它的一些方法, 來獲取用戶錄入的數(shù)據(jù)
5.2 使用步驟
1.導(dǎo)包 包就是文件夾
注意:
Scanner類是java.util包下的類, 使用之前必須要先導(dǎo)包.
導(dǎo)包的語句是定義在類的上面的, 格式如下:
import java.util.Scanner;
2.創(chuàng)建Scanner類的對象, 格式為:
//暫時(shí)先理解為固定格式, 也就是必須這么寫.
Scanner sc = new Scanner(System.in);
3.通過Scanner類的nextInt()方法接收用戶錄入的數(shù)據(jù)
int a = sc.nextInt();
5.3 案例一: Scanner入門
需求
提示用戶錄入他/她的年齡.
通過鍵盤錄入功能, 接收用戶錄入的年齡.
將用戶錄入的數(shù)據(jù)(年齡)打印到控制臺(tái)上.
參考代碼
package com.company;
import java.util.Scanner;
/**
* @author Liu
* @date 2020/4/14 10:29
*/
public class JianRuLianXi01 {
public static void main(String[] args) {
//提示用戶錄入他/她的年齡.
System.out.println("請輸入年齡:");
//通過鍵盤錄入功能, 接收用戶錄入的年齡.
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
//將用戶錄入的數(shù)據(jù)(年齡)打印到控制臺(tái)上.
System.out.println(age);
}
}
5.4 案例二: 鍵盤錄入版和尚身高
需求
提示用戶錄入第一個(gè)和尚的身高, 并接收
提示用戶錄入第二個(gè)和尚的身高, 并接收
提示用戶錄入第三個(gè)和尚的身高, 并接收.
通過三元運(yùn)算符, 獲取三個(gè)和尚中身高最矮的那個(gè)和尚的身高.
將結(jié)果(最低身高)打印到控制臺(tái)上.
參考代碼
package com.company;
import java.util.Scanner;
/**
* @author Liu
* @date 2020/4/14 10:34
*/
public class JianRuLianXi02 {
public static void main(String[] args) {
//提示用戶錄入第一個(gè)和尚的身高, 并接收
System.out.println("請輸入第一個(gè)和尚的身高:");
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
//提示用戶錄入第二個(gè)和尚的身高, 并接收
System.out.println("請輸入第一個(gè)和尚的身高:");
Scanner scanner1 = new Scanner(System.in);
int b = scanner1.nextInt();
//提示用戶錄入第三個(gè)和尚的身高, 并接收.
System.out.println("請輸入第一個(gè)和尚的身高:");
Scanner scanner2 = new Scanner(System.in);
int c = scanner2.nextInt();
//通過三元運(yùn)算符, 獲取三個(gè)和尚中身高最矮的那個(gè)和尚的身高.
int i = a > b ? a : b;
int max = i > c ? i : c;
//將結(jié)果(最低身高)打印到控制臺(tái)上.
System.out.println(max);
}
}
6. IDEA常用快捷鍵
| 快捷鍵 | 功能 |
|---|---|
Alt+Enter |
導(dǎo)入包,自動(dòng)修正代碼 |
Ctrl+Y |
刪除光標(biāo)所在行 |
Ctrl+D |
復(fù)制光標(biāo)所在行的內(nèi)容,插入光標(biāo)位置下面 |
Ctrl+Alt+L |
格式化代碼 |
Ctrl+/ |
單行注釋 |
Ctrl+Shift+/ |
選中代碼注釋,多行注釋,再按取消注釋 |
Alt+Shift+上下箭頭/ |
移動(dòng)當(dāng)前代碼行 |
7.練習(xí)
7.1 練習(xí)一
需求
小明左、右手中分別拿兩張紙牌(比如:黑桃10和紅桃8,數(shù)字10和8可通過鍵盤錄入),要求編寫代碼交換小明手中的牌
參考代碼
package com.company;
import java.util.Scanner;
/**
* @author Liu
* @date 2020/4/12 15:45
*/
public class Test18 {
public static void main(String[] args) {
System.out.println("請輸入小明左手拿的紙牌:");
Scanner sc = new Scanner(System.in);
int a=sc.nextInt();
System.out.println("請輸入小明右手拿的紙牌:");
Scanner scc = new Scanner(System.in);
int b=scc.nextInt();
System.out.println("互換前小明手中的紙牌:");
System.out.println("小明左手拿的紙牌:"+a);
System.out.println("小明右手拿的紙牌:"+b);
int c = b;
int d = a;
System.out.println("互換后小明手中的紙牌:");
System.out.println("小明左手拿的紙牌:"+c);
System.out.println("小明右手拿的紙牌:"+d);
}
}
練習(xí)二
需求
定義一個(gè)int類型的變量,初始化值為123,求這個(gè)數(shù)的個(gè)位,十位,百位分別是多少?
參考代碼
public class Task01 {
public static void main(String[] args) {
//1.定義一個(gè)變量,值為123
int n = 123;
//2.獲取該數(shù)字中個(gè)位、十位、百位的數(shù)字
// 個(gè)位: 數(shù)字 % 10
int ge = n % 10;
// 十位: 數(shù)字 / 10 % 10;
int shi = n / 10 % 10;
// 百位: 數(shù)字 / 100 % 10;
int bai = n /100 % 10;
//3.打印結(jié)果
//123的個(gè)位是3,十位是2,百位是1
System.out.println(n + "的個(gè)位是"+ ge +",十位是"+ shi +",百位是" + bai);
}
}
練習(xí)三
需求
鍵盤錄入一個(gè)三位數(shù)字,輸出該三位數(shù)字是否是水仙花數(shù)字?
水仙花數(shù)字要求: 指的是一個(gè)三位數(shù),個(gè)位、十位、百位的數(shù)字立方和等于原數(shù)
例如 153 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 + 1 = 153
參考代碼
public class Task03 {
public static void main(String[] args) {
//1.創(chuàng)建鍵盤錄入對象
Scanner sc = new Scanner(System.in);
//2.獲取一個(gè)int數(shù)字
System.out.println("請輸入一個(gè)三位整數(shù)");
int num = sc.nextInt();
//3.獲取個(gè)位,十位,百位
int ge = num%10;
int shi = num/10%10;
int bai = num/100%10;
//4.求個(gè)位,十位,百位的立方和
int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;
//5.利用三元運(yùn)算符求立方和是否等于該數(shù)字本身
boolean flag = (sum==num)?true:false;
//6.打印結(jié)果
System.out.println(num+"是水仙花數(shù)字嗎? "+flag);
}
}
練習(xí)四
需求
按照從大到小的順序輸出四位數(shù)中的個(gè)位+百位=十位+千位(3553,2332,1166,8228,3773)的數(shù)字及個(gè)數(shù).
每行輸出5個(gè)滿足條件的數(shù),之間用空格分隔
如:9999 9988 9977 9966 9955
參考代碼
package com.company;
/**
* @author Liu
* @date 2020/4/14 10:50
*/
public class Task01 {
public static void main(String[] args) {
//按照從大到小的順序輸出四位數(shù)中的個(gè)位+百位=十位+千位(3553,2332,1166,8228,3773)的數(shù)字及個(gè)數(shù).
//每行輸出5個(gè)滿足條件的數(shù),之間用空格分隔
//如:9999 9988 9977 9966 9955
int count = 0;
for (int i = 9999 ; i >= 1000;i--){
int ge = i % 10;
int shi = (i % 100) / 10;
int bai = (i % 100) / 100;
int qian = i / 1000;
if (ge + bai == shi + qian ){
count += 1;
if (count <= 5){
System.out.print(i +" ");
}
}
}
}
}
練習(xí)五
需求
從鍵盤上錄入一個(gè)大于100的三位數(shù),求出100到該數(shù)字之間滿足如下要求的數(shù)字之和, 要求如下:
數(shù)字的個(gè)位數(shù)不為7;
數(shù)字的十位數(shù)不為5;
數(shù)字的百位數(shù)不為3;
參考代碼
package com.company;
import java.util.Scanner;
/**
* @author Liu
* @date 2020/4/14 10:50
*/
public class Task02 {
public static void main(String[] args) {
//從鍵盤上錄入一個(gè)大于100的三位數(shù),求出100到該數(shù)字之間滿足如下要求的數(shù)字之和, 要求如下:
//數(shù)字的個(gè)位數(shù)不為7;
//數(shù)字的十位數(shù)不為5;
//數(shù)字的百位數(shù)不為3;
System.out.println("請輸入一個(gè)大于100的三位數(shù):");
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for (int i = 100; i <= n ; i++){
int ge = i % 10;
int shi = (i % 100) / 10;
int bai = i / 100;
if (ge != 7 && shi != 5 && bai != 3){
System.out.println(i);
}
}
}
}







