經典Java入門練習:利用 Scanner 讀取用戶輸入,結合 switch-case 和巢狀 if-else 處理 Tuesday/Thursday (均以T開頭) 和 Saturday/Sunday (均以S開頭) 的二次判斷。本文提供健壯的代碼:大小寫不敏感、輸入長度校驗、錯誤提示友好。
switch 判斷:M→Monday, W→Wednesday, F→Friday, T→需讀第二字母, S→需讀第二字母, 其他→錯誤。equalsIgnoreCase 處理大小寫。import java.util.Scanner;
public class WeekdayDetector {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入星期英文首字母 (如 M, T, W, F, S):");
String firstInput = scanner.next().trim().toUpperCase(); // 統一大寫
// 1. 校驗輸入長度
if (firstInput.length() != 1) {
System.out.println("輸入錯誤:請輸入單個字母!");
scanner.close();
return;
}
char firstChar = firstInput.charAt(0);
// 2. 主判斷
switch (firstChar) {
case 'M':
System.out.println("星期一 (Monday)");
break;
case 'W':
System.out.println("星期三 (Wednesday)");
break;
case 'F':
System.out.println("星期五 (Friday)");
break;
case 'T':
// 需二次判斷 Tuesday / Thursday
System.out.print("檢測到 'T',請輸入第二個字母 (u/h):");
String secondInputT = scanner.next().trim().toUpperCase();
if (secondInputT.length() != 1) {
System.out.println("輸入錯誤:請輸入單個字母!");
} else {
char secondChar = secondInputT.charAt(0);
if (secondChar == 'U') System.out.println("星期二 (Tuesday)");
else if (secondChar == 'H') System.out.println("星期四 (Thursday)");
else System.out.println("無法識別:Tuesday 需 'u', Thursday 需 'h'");
}
break;
case 'S':
// 需二次判斷 Saturday / Sunday
System.out.print("檢測到 'S',請輸入第二個字母 (a/u):");
String secondInputS = scanner.next().trim().toUpperCase();
if (secondInputS.length() != 1) {
System.out.println("輸入錯誤:請輸入單個字母!");
} else {
char secondChar = secondInputS.charAt(0);
if (secondChar == 'A') System.out.println("星期六 (Saturday)");
else if (secondChar == 'U') System.out.println("星期日 (Sunday)");
else System.out.println("無法識別:Saturday 需 'a', Sunday 需 'u'");
}
break;
default:
System.out.println("無法識別的星期首字母:" + firstChar);
}
scanner.close();
}
}
請輸入星期英文首字母 (如 M, T, W, F, S):t
檢測到 'T',請輸入第二個字母 (u/h):h
星期四 (Thursday)
請輸入星期英文首字母 (如 M, T, W, F, S):S
檢測到 'S',請輸入第二個字母 (a/u):a
星期六 (Saturday)
請輸入星期英文首字母 (如 M, T, W, F, S):x
無法識別的星期首字母:X
import java.util.*;
public class WeekdayDetectorMap {
// 定義映射:首字母 -> (唯一星期 | 二次判斷Map)
private static final Map WEEKDAY_MAP = new HashMap<>();
static {
WEEKDAY_MAP.put('M', "Monday");
WEEKDAY_MAP.put('W', "Wednesday");
WEEKDAY_MAP.put('F', "Friday");
WEEKDAY_MAP.put('T', Map.of('U', "Tuesday", 'H', "Thursday"));
WEEKDAY_MAP.put('S', Map.of('A', "Saturday", 'U', "Sunday"));
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入星期英文首字母:");
String input = scanner.next().trim().toUpperCase();
if (input.length() != 1) { System.out.println("請輸入單個字母!"); return; }
char first = input.charAt(0);
Object mapping = WEEKDAY_MAP.get(first);
if (mapping == null) { System.out.println("無法識別:" + first); return; }
if (mapping instanceof String) {
System.out.println(mapping);
} else if (mapping instanceof Map) {
@SuppressWarnings("unchecked")
Map secondMap = (Map) mapping;
System.out.print("請輸入第二字母 " + secondMap.keySet() + ":");
String secondInput = scanner.next().trim().toUpperCase();
if (secondInput.length() == 1) {
String result = secondMap.get(secondInput.charAt(0));
System.out.println(result != null ? result : "無法識別");
} else { System.out.println("請輸入單個字母!"); }
}
scanner.close();
}
}
trim() 去除換行。case 'm': case 'M':。scanner.close() 防洩漏 (Java 7+ try-with-resources 更佳)。此題考察 Scanner 基礎 IO、switch/if 分支控制、字符處理、防禦性編程。Map驅動版本展示「數據驅動邏輯」的良好設計習慣,推薦實際項目採用。