天天看點

Java入門系列-08-選擇結構if-else 選擇結構switch 選擇結構試一試

這篇文章為你搞懂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);
	}
}           

複制