1. 程式人生 > >Java中nextInt()之後的nextLine()讀取不到鍵盤輸入的情況

Java中nextInt()之後的nextLine()讀取不到鍵盤輸入的情況

今天在刷題過程中遇到一個奇怪的問題。

Scanner in = new Scanner(System.in);
int count= in.nextInt();
String pile = in.nextLine();
String[] piles = pile.split(" ");

因為需要接收傳入的兩個引數,第一個為int型別,所以呼叫nextInt()方法。

第二個引數為帶空格的字串,呼叫next()方法無法讀取到空格之後的內容,遂呼叫nextLine()方法,但是奇怪的事情也發生了。

當輸入第一個引數後,還未等輸入第二個引數,程式就報異常退出。數字格式錯誤,要轉換的字串為空串

,顯然pile沒有接收到引數,然而確實也沒等輸入引數程式就已經報錯退出。但是程式沒有語法錯誤,編譯也能通過。

用百度搜索相關問題 ,找到了錯誤的原因:

當用nextInt()讀取緩衝區資料時,遇到回車或者空格,資料就會被讀取走,但是回車符或者空格會被留下。當再呼叫nextLine()時,因為nextLine()是以回車符結束,當被呼叫後,剛好緩衝區還有被nextInt()“吃”剩下的回車符,所以還沒等接著輸入第二個引數,nextLine()就已經結束。因為只讀取到一個回車符,所以pile的引數自然為空,從而導致後序程式出現異常。

解決方案:

把nextInt()換成nextLine(),再轉換成int型別,就完美解決。

String s1 = in.nextLine();
int count = Integer.parseInt(s1);
String pile = in.nextLine();
String[] piles = pile.split(" ");