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

Java Scanner nextInt 後調用 nextLine 讀取空行問題解析

     編輯:程式設計綜合問答

問題現象

Scanner in = new Scanner(System.in);
System.out.print("請輸入i的值: ");
int i = in.nextInt();      // 輸入 "3" 並按 Enter
System.out.print("請輸入姓名: ");
String name = in.nextLine(); // 直接讀到空字符串,跳過輸入
System.out.print("請輸入性別: ");
String sex = in.nextLine();  // 實際讀到姓名輸入

根本原因

  • nextInt() 只讀取整數部分,**不消耗後面的換行符** \n。
  • 緩衝區殘留 \n,緊接的 nextLine() 讀取該換行符並返回空字符串。

解決方案

方法一:額外調用 nextLine() 清空緩衝區 (推薦)

int i = in.nextInt();
in.nextLine();  // 消耗殘留的換行符
String name = in.nextLine(); // 正常等待輸入

方法二:統一使用 nextLine() 再解析

String line = in.nextLine();
int i = Integer.parseInt(line.trim());
String name = in.nextLine();

方法三:使用正則跳過空白 (不推薦)

in.skip("(\r\n|\n)"); // 手動跳過換行符

完整修正示例

Scanner in = new Scanner(System.in);
System.out.print("請輸入i的值: ");
int i = in.nextInt();
in.nextLine();  // 關鍵:清空緩衝區換行符

for (int j = 1; j <= i; j++) {
    System.out.print("請輸入姓名: ");
    String name = in.nextLine();
    System.out.print("請輸入性別: ");
    String sex = in.nextLine();
    System.out.print("請輸入年齡: ");
    int age = in.nextInt();
    System.out.print("請輸入成績: ");
    float score = in.nextFloat();
    in.nextLine(); // 每次 nextInt/nextFloat 後補一個 nextLine()
    
    // 處理學生對象...
}

最佳實踐原則

  1. 混合使用 nextXxx() 和 nextLine() 時,每次 nextInt/nextDouble/nextFloat 後緊跟一個 nextLine()。
  2. 或統一用 nextLine() 讀取整行,再用 Integer.parseInt、Float.parseFloat 解析,邏輯更清晰。
  3. 關閉 Scanner 時調用 in.close() (但注意會關閉 System.in,後續無法再讀取)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved