程序流程控制:條件語句switch-case練習

練習1:對學生成績大於60分的,輸出“合格”。低於60分的,輸出“不合格”。

class Test1 {
	public static void main(String[] args) {
		/*傻逼寫法
		int score = 78;
		switch(score){
		case 0:
		case 1:
		case 2:
			...
		case 100:
		}
		*/
	//*************************
		/*if-else寫法
		int score = 78;
		if(score >= 60){
		}else{
		}
		*/
	//*************************
		int score = 78;
		switch(score / 10){
		case 0:
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			System.out.println("不及格");
			break;
		case 6:
		case 7:
		case 8:
		case 9:
		case 10:
			System.out.println("及格");
			break;

		}
		
		//更優的解決方案:
		switch(score / 60){
		case 0:
			System.out.println("不及格");
			break;
		case 1:
			System.out.println("及格");
			break;
		}
	
	}
}

說明:如果switch-case結構中的多個case的執行語句相同,則可以考慮進行合併。

練習2:編寫程序:從鍵盤上輸入2019年的“month”和“day”,要求通過程序輸出輸入的日期爲2019年的第幾天。

import java.util.Scanner;
class Test {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.println("請輸入2019年的month:");
		int month = scan.nextInt();
		System.out.println("請輸入2019年的day:");
		int day = scan.nextInt();

		//定義一個變量來保存總天數
		int sumDays = 0;

		//方式一:冗餘
		/*
		
		if(month == 1){
			sumDays = day;
		}else if(month == 2){
			sumDays = 31 + day;
		}else if(month == 3){
			sumDays = 31 + 28 + day;
		}else if(month == 4){
			sumDays = 31 + 28 + 31 + day;
		}
		//...
		else{//month == 12
			//sumDays = ..... + day;
		}

		*/
		
		//方式二:冗餘
		/*
		switch(month){
		case 1:
			sumDays = day;
			break;
		case 2:
			sumDays = 31 + day;
			break;
		case 3:
			sumDays = 31 + 28 + day;
			break;
		...
		}
		*/
		switch(month){
		case 12:
			sumDays += 30;
		case 11:
			sumDays += 31;
		case 10:
			sumDays += 30;
		case 9:
			sumDays += 31;
		case 8:
			sumDays += 31;
		case 7:
			sumDays += 30;
		case 6:
			sumDays += 31;
		case 5:
			sumDays += 30;
		case 4:
			sumDays += 31;
		case 3:
			sumDays += 28;
		case 2:
			sumDays += 31;
		case 1:
			sumDays += day;
		}
		System.out.println("2019年" + month + "月" + day + "日是當年的第" + sumDays + "天");
	}
}

說明:break在switch-case中是可選的

練習3:從鍵盤分別輸入年、月、日,判斷這一天是當年的第幾天
注:判斷一年是否是閏年的標準:
1)可以被4整除,但不可被100整除

2)可以被400整除

import java.util.Scanner;
class Test {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.println("請輸入year:");
		int year = scan.nextInt();
		System.out.println("請輸入month:");
		int month = scan.nextInt();
		System.out.println("請輸入day:");
		int day = scan.nextInt();
		//定義一個變量來保存總天數
		int sumDays = 0;
		switch(month){
		case 12:
			sumDays += 30;
		case 11:
			sumDays += 31;
		case 10:
			sumDays += 30;
		case 9:
			sumDays += 31;
		case 8:
			sumDays += 31;
		case 7:
			sumDays += 30;
		case 6:
			sumDays += 31;
		case 5:
			sumDays += 30;
		case 4:
			sumDays += 31;
		case 3:
			//sumDays += 28;
			//判斷year是否是閏年
			if((year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0){
				sumDays += 29;
			}else{
				sumDays += 28;
			}
		case 2:
			sumDays += 31;
		case 1:
			sumDays += day;
		}
		System.out.println(year + "年" + month + "月" + day + "日是當年的第" + sumDays + "天");
	}
}

說明:

  1. 凡是可以使用switch-case的結構,都可以轉換爲if-else。反之,不成立。
  2. 我們寫分支結構時,當發現既可以使用switch-case,(同時,switch中表達式的取值情況不太多),
    又可以使用if-else時,我們優先選擇使用switch-case。原因:switch-case執行效率稍高。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章