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(" ");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章