這篇文章為你搞懂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'
關鍵字修飾後的常量類型。多個 case 後的常量不能重複。
final
敲一敲:
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);
}
}
複制