Java入門系列-08-選擇結構

要成為王的男人發表於2018-10-18

這篇文章為你搞懂2個問題

  1. if-else選擇結構的使用?
  2. 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。

試一試

  1. 下面程式碼的執行結果是什麼,解釋其原因
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;
		}
	}
}
複製程式碼
  1. 下面程式碼的執行結果是什麼?為什麼會這樣?
public class Question2 {
	public static void main(String[] args) {
		int a=10;
		if(++a>10||++a>11) {
			a++;
		}
		System.out.println("a的結果:"+a);
	}
}
複製程式碼

搜尋關注公眾號「享智同行」,第一時間獲取技術乾貨 回覆"008"獲取答案和解析

相關文章