首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java Scanner 類 nextLine 與 nextFloat 混用導致輸入錯位問題

     編輯:程式設計綜合問答

錯誤現象

輸入字串 "1231\n123\n1.23\nccasda\n12333.353\n",依序呼叫 nextInt()、nextLong()、nextFloat()、nextLine()、nextDouble(),最後拋出 InputMismatchException。

根本原因

nextFloat() 讀取 1.23 後,**游標停留在換行符前**;隨後 nextLine() 讀取的是**空行**(換行符後到下一行前),回傳空字串;接著 nextDouble() 嘗試解析 "ccasda" 失敗。

解決方案

  1. 在 nextFloat() 後額外呼叫一次 nextLine() 消耗換行符。
  2. 或統一使用 nextLine() 讀整行再自行解析(Double.parseDouble 等),避免混用 token 與 line 方法。

最佳實踐

Scanner s = new Scanner(input);
int a = s.nextInt(); s.nextLine(); // 消耗換行
long b = s.nextLong(); s.nextLine();
float c = s.nextFloat(); s.nextLine();
String d = s.nextLine(); // 讀整行文字
double e = s.nextDouble();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved