今天,在整理筆記的時候發現一個奇怪的現象:
第一種情況:
會發現輸出結果跟我們想象的有很大的差別,就是控制台還沒輸入姓名,就已經輸出顯示了。
原因如下:
Scanner是一個掃描器,我們錄取到鍵盤的數據,先存到緩存區等待讀取,它判斷讀取結束的標示是 空白符;比如空格,回車,tab 等等。
next()方法讀取到空白符就結束;
nextLine()讀取到回車結束也就是“\r”;
所以沒還順序前測試的時候next()再檢測的空格的時候就結束輸出了。
修改順序后遇到的問題就是因為next()讀取到空白符前的數據時結束了,然后把回車“\r”留給了nextLine();所以上面nextLine()沒有輸出,不輸出不代表沒數據,是接到了空(回車“/r”)的數據。
第二種情況:
第三種情況:
第四種情況:
第四種情況:如果需要從鍵盤接收多個字符串,可以把nextLine()放到nextInt()前面,如果實在不行,則在nextInt()后邊添加nextLine()方法吸收掉多余的字符串
綜上:二三四種情況都正確,編寫程序的時候注意使用順序就不會出錯。