錯誤代碼
String[] num = in.nextLine().split(" ");
int[] number = new int[num.length]; // 空輸入時 num.length=1, num[0]="",Integer.valueOf("") 拋 NumberFormatException
for (int i=0; i
現象
- 直接按回車 →
nextLine() 返回 ""。
split(" ") 返回 [""](長度 1)。
Integer.valueOf("") 拋 NumberFormatException。
修正:先判斷空輸入
String line = in.nextLine().trim();
if (line.isEmpty()) {
System.out.println("#Total:0");
return;
}
String[] num = line.split("\\s+"); // \\s+ 匹配多個空白
int[] number = new int[num.length];
for (int i = 0; i < number.length; i++) {
number[i] = Integer.parseInt(num[i]); // parseInt 比 valueOf 稍快
}
System.out.println("#Total:" + number.length);
關鍵點
trim() 去除首尾空白,isEmpty() 判斷真空行。
split("\\s+") 兼容多空格、Tab、換行等空白字符。
- 捕獲
NumberFormatException 可進一步防呆(如輸入非數字)。
進階:通用安全讀取整數數組
public static int[] readIntArray(Scanner in, String prompt) {
while (true) {
System.out.print(prompt);
String line = in.nextLine().trim();
if (line.isEmpty()) return new int[0];
try {
return Arrays.stream(line.split("\\s+"))
.mapToInt(Integer::parseInt)
.toArray();
} catch (NumberFormatException e) {
System.out.println("包含非整數,請重新輸入");
}
}
}