Java中nextInt()之後的nextLine()讀取不到鍵盤輸入的情況
阿新 • • 發佈:2018-11-10
今天在刷題過程中遇到一個奇怪的問題。
Scanner in = new Scanner(System.in);
int count= in.nextInt();
String pile = in.nextLine();
String[] piles = pile.split(" ");
因為需要接收傳入的兩個引數,第一個為int型別,所以呼叫nextInt()方法。
第二個引數為帶空格的字串,呼叫next()方法無法讀取到空格之後的內容,遂呼叫nextLine()方法,但是奇怪的事情也發生了。
當輸入第一個引數後,還未等輸入第二個引數,程式就報異常退出。數字格式錯誤,要轉換的字串為空串
用百度搜索相關問題 ,找到了錯誤的原因:
當用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(" ");