str += String.format("%" + 4*week + "c", ' '); // 編譯錯誤:char 無法匹配 %c 佔位符要求的 Character/CharSequence
String.format 的 %c 佔位符對應參數類型為 Character (包裝類) 或 CharSequence (介面,String 實現)。**基本型別 char 不會自動裝箱為 Character 以匹配可變參數 Object...**,導致編譯器找不到匹配的方法簽名。
// 1. 傳字符串 (最簡單,隱式轉 CharSequence)
str += String.format("%" + 4*week + "c", " ");
// 2. 手動裝箱為 Character 對象
str += String.format("%" + 4*week + "c", Character.valueOf(' '));
// 3. 使用 String.repeat (Java 11+,語義最清晰,無需 format)
str += " ".repeat(4 * week);
%c:單字符。傳入字符串時**只取第一個字符**。format("%5c", "abc") → " a" (寬度 5,右對齊,填充空格)。%s:字符串。format("%5s", "ab") → " ab" (整體右對齊)。你的場景是「生成 N 個空格」," ".repeat(N) (Java 11+) 或 String.format("%" + N + "s", "") (Java 5+) 語義比 %c 更直觀。
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, 1);
int weekDay = cal.get(Calendar.DAY_OF_WEEK); // 1=周日 ... 7=周六
// 假設每佔 4 字符寬度
String leadingSpaces = " ".repeat(4 * (weekDay - 1)); // Java 11+
// 或 String.format("%" + (4*(weekDay-1)) + "s", "");
System.out.print(leadingSpaces);
String.format("%Nc", ' ') 報錯是因基本型別 char 不匹配可變參數 Object。改傳 " " (String) 或 Character.valueOf(' ') 即可。**Java 11+ 首選 " ".repeat(N)**,效能最佳、語義最清晰、無格式化開銷。