室內(nèi)設(shè)計風(fēng)格東莞seo優(yōu)化公司
錯誤如下:
有時候還會拋出InputMismatchException異常
看!我只輸入了一個5,并沒有給str賦值,它就已經(jīng)將結(jié)果打印出來了!這就意味著,str是讀取到了數(shù)據(jù)的,只不過這個數(shù)據(jù)并不是我們想要的輸入的數(shù)據(jù)!
這是因為nextInt() / nextDouble() 和 nextLine()的處理機(jī)制不同!
- nextInt() / nextDouble()在緩沖區(qū)中遇到 回車符、空格等空白字符時,它會將空白字符之前的數(shù)據(jù)都讀走,但此時,空白字符還留在緩沖區(qū)中!
- nextLine()會把包括空白字符在內(nèi)的數(shù)據(jù)都讀走,所以這時就可以說得通為什么我們并沒有輸入,但是str就已經(jīng)有值了,這是因為它讀取到了我們在nextInt()輸入最后打出的回車符!
解決方案:
- 在nextInt() / nextDouble()再添加一個nextLine(),讓這個nextLine()將空白字符讀走
- 將nextLine()換成next()
補(bǔ)充說明:
- ?Scanner的next()、nextInt()、nextLine()讀取機(jī)制更詳細(xì)的介紹:【JAVA】Scanner的next()、nextInt()、nextLine()讀取機(jī)制