1. 程式人生 > 實用技巧 >【日常排雷】——Java中的Scanner類物件呼叫nextInt()後呼叫nextLine();不會掛起的問題

【日常排雷】——Java中的Scanner類物件呼叫nextInt()後呼叫nextLine();不會掛起的問題

通常來說,在呼叫Scanner類物件的nextLine()方法的時候,當前的執行緒是應該掛起的。

然而這幾天刷題的時候遇到一個問題。

場景是這樣的:

Int i = scanner.nextInt();
String str = scanner.nextLine();

執行的時候發現,當鍵盤輸入完數字後當前的執行緒並沒有因為下一行的輸入程式碼而掛起,直接向後執行,導致了錯誤。

上網查閱了一下後發現,原來nextInt()只會讀走鍵盤的輸入的數字,而回車符號“\n”會保留,直接導致了後面nextLine()會收到一個回車符號,然後使我們產生執行緒沒有掛起的錯覺。

解決方案有二:

一、數字和字串的輸入使用兩個不同的Scanner類物件:

Int i = scanner1.nextInt();
String str = scanner2.nextLine();

但是不知道為何,在一些刷題網站的IDE上,如果你使用了第二個Scanner物件並呼叫next系列的方法就會在執行時報越界(本地IDE無問題),所以建議用下面的方案。

二、統一使用nextLine(),當要輸入數字時,以String的形式進行輸入,然後轉換成int型別:

intn=Integer.parseInt(sc.nextLine());