這篇文章為你搞懂2個問題
- if-else選擇結構的使用?
- switch 的使用?
前面我們學習的程式碼都是直上直下的執行,還不會“拐彎”,這篇文章帶大家來看一下會“拐彎”的程式碼——選擇結構,顧名思義就有選擇性的執行程式碼。
if-else 選擇結構
簡單if結構
只有一種執行情況,表示式結果為true時執行結構內程式碼片段,為false時不執行
語法:
if(表示式){
程式碼片段
}
複製程式碼
敲一敲:
import java.util.Scanner;
public class DemoIf {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);//建立掃描器
System.out.println("請輸入你的年齡:");
int age=input.nextInt();
if(age>=18){
System.out.println("你已經成年了!");
}
System.out.println("程式結束");
}
}
複製程式碼
如果在控制檯輸入了一個大於等於18的數,那麼表示式中的結果為 true 會輸出 “你已經成年了!程式結束” 否則只會輸出“程式結束”
if-else 結構
有兩個程式碼段,執行結果只有一個,執行哪個程式碼段仍然是由 if 中的表示式決定,如果表達的結果為 true 則執行 if 後的程式碼段,為 false 時執行 else 後面的程式碼段。
語法:
if(表示式){
程式碼段1(表示式為 true 執行)
}else{
程式碼段2(表示式為 false 執行)
}
複製程式碼
敲一敲:
import java.util.Scanner;
public class DemoIf {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);//建立掃描器
System.out.println("請輸入你的年齡:");
int age=input.nextInt();
if(age>=18){
System.out.println("你已經成年了!");
}else {
System.out.println("你還沒有成年!");
}
System.out.println("程式結束");
}
}
複製程式碼
if-else if 多重選擇結構
有多個選擇條件,但是執行的結果只有一個。執行時會從上向下逐個檢查表示式是否為 true ,如果表示式為 true 執行對應的程式碼段,並且後面的表達不再檢查,如果為 false 會繼續向下檢查,直到遇到 表示式結果為 true 執行程式碼段。如果所有的表示式檢查一遍後都為false,則執行 else。
語法:
if(表示式1){
程式碼段1
}else if(表示式2){
程式碼段2
}
……
else{
所有條件都不滿足時執行
}
複製程式碼
敲一敲:
import java.util.Scanner;
public class DemoMultipleif {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("請輸入你的成績:");
int score=input.nextInt();
if(score>=90) {
System.out.println("成績等級為:A");
}else if(score>=80&&score<90) {
System.out.println("成績等級為:B");
}else if(score>=70&&score<80) {
System.out.println("成績等級為:C");
}else if(score>=60&&score<70) {
System.out.println("成績等級為:D");
}else {
System.out.println("成績等級為:E");
}
}
}
複製程式碼
switch 選擇結構
switch 結構和多重 if 的功效是一樣的,多重if更適合範圍和區間的判斷,switch更適合等值判斷。
語法:
switch(表示式){
case 常量1:
程式碼段1
break;
case 常量2:
程式碼段2
break;
……
default:
所有的case都不滿足時
break;
}
複製程式碼
switch 中的表示式就是要和多個常量對比的條件,表示式可以是 String(jdk1.7及以上)、byte、short、int、char、列舉型別。case 後面是常量,常量是像
1
'a'
這樣的資料或者是final
關鍵字修飾後的常量型別。多個 case 後的常量不能重複。
敲一敲:
import java.util.Scanner;
public class DemoSwitch {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("輸入1-7的數字,檢視週一到週日的菜譜:");
int day=input.nextInt();
switch (day) {
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;
default:
System.out.println("輸入的陣列有誤!輸入1-7的數字");
break;
}
}
}
複製程式碼
break關鍵字在結構中的作用是中斷後面程式碼的執行,所以在每個case 語句後都有一個break,確保每執行一個case 便不再執行其他 case,但是也有例外可以省略break,編寫下面的程式碼感受一下。
敲一敲:
import java.util.Scanner;
public class DemoNoBreak {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("輸入1-7的數字,檢視週一到週日的菜譜:");
int day=input.nextInt();
switch (day) {
case 1:
case 3:
case 5:
System.out.println("一、三、五:番茄牛腩");
break;
case 2:
case 4:
System.out.println("二、四:鍋包肉");
break;
case 6:
case 7:
System.out.println("週六、日:可樂雞翅");
break;
default:
System.out.println("輸入的陣列有誤!輸入1-7的數字");
break;
}
}
}
複製程式碼
如果一些case 語句的執行結果都是相同的,那麼就可以省略掉break,讓程式碼繼續向下執行,直到遇到另一個break。
試一試
- 下面程式碼的執行結果是什麼,解釋其原因
public class Question1 {
public static void main(String[] args) {
char chr='a';
switch (chr) {
case 96:
System.out.println(96);
break;
case 97:
System.out.println(97);
break;
case 98:
System.out.println(98);
break;
default:
System.out.println("啥也沒有");
break;
}
}
}
複製程式碼
- 下面程式碼的執行結果是什麼?為什麼會這樣?
public class Question2 {
public static void main(String[] args) {
int a=10;
if(++a>10||++a>11) {
a++;
}
System.out.println("a的結果:"+a);
}
}
複製程式碼
搜尋關注公眾號「享智同行」,第一時間獲取技術乾貨 回覆"008"獲取答案和解析