練習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 + "天");
}
}
說明:
- 凡是可以使用switch-case的結構,都可以轉換爲if-else。反之,不成立。
- 我們寫分支結構時,當發現既可以使用switch-case,(同時,switch中表達式的取值情況不太多),
又可以使用if-else時,我們優先選擇使用switch-case。原因:switch-case執行效率稍高。