程式碼意圖:從標準輸入讀取數字累加,輸入 0 結束。但輸入 1 2 3(空白分隔)時拋出 NumberFormatException,印出 "Invide number"。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
int i, sum = 0;
do {
str = br.readLine(); // 讀取整行 "1 2 3"
try {
i = Integer.parseInt(str); // 嘗試解析 "1 2 3" → 失敗
} catch (NumberFormatException e) {
System.out.println("Invide number");
i = 0;
}
sum += i;
System.out.println("Current sum is: " + sum);
} while (i != 0);
readLine() 讀取的是「整行文字」,包含空白。Integer.parseInt() 只能解析純數字字串(可含正負號),不支援空白分隔的多個數字。Scanner sc = new Scanner(System.in);
int sum = 0;
System.out.println("Enter numbers, 0 to Exit");
while (sc.hasNextInt()) {
int i = sc.nextInt();
if (i == 0) break;
sum += i;
System.out.println("Current sum is: " + sum);
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int sum = 0;
String line;
while ((line = br.readLine()) != null) {
for (String token : line.trim().split("\\s+")) {
try {
int i = Integer.parseInt(token);
if (i == 0) { System.out.println("Final sum: " + sum); return; }
sum += i;
System.out.println("Current sum is: " + sum);
} catch (NumberFormatException e) {
System.out.println("Invalid number: " + token);
}
}
}
new BufferedReader(new InputStreamReader(System.in)).lines()
.flatMap(line -> Arrays.stream(line.split("\\s+")))
.map(String::trim)
.filter(s -> !s.isEmpty())
.map(Integer::parseInt)
.takeWhile(i -> i != 0)
.forEach(i -> System.out.println("Sum: " + (sum += i)));
| 方向 | 方法 | 範例 |
|---|---|---|
| int → String | String.valueOf(i) / Integer.toString(i) / i + "" | String s = String.valueOf(123); |
| String → int | Integer.parseInt(s) / Integer.valueOf(s) | int i = Integer.parseInt("123"); |
| double → String | String.valueOf(d) / Double.toString(d) | |
| String → double | Double.parseDouble(s) / Double.valueOf(s) | |
| 格式化輸出 | String.format("%,.2f", d) / DecimalFormat | String.format("%,.2f", 1234.5) → "1,234.50" |
parseInt 拋出 NumberFormatException 屬非受檢異常,需 try-catch。trim() 後再解析。int 範圍 → 改用 Long.parseLong 或 BigInteger。1 234,56 需用 NumberFormat.getInstance(Locale.FRANCE).parse()。「輸入 1 2 3 卻報錯」是初學者最常遇到的標準輸入處理誤區。掌握 Scanner 或 split("\\s+") 分詞技巧,並熟悉各型別轉換 API,即可輕鬆處理各類數字輸入場景。