首先,要明白,我們?cè)诳刂婆_(tái)中所輸入的數(shù)據(jù)都是先存入緩沖區(qū)中等待 Scanner 掃描。
然后,在?Java?中,Scanner 就像是一個(gè)掃描器,它會(huì)從內(nèi)存中的一塊緩沖區(qū)中掃描并且讀入數(shù)據(jù),而這個(gè) Scanner 掃描器在掃描過程中判斷停止掃描的依據(jù)是“空白符”(即空格或者回車之類的空白符號(hào))。
實(shí)際上 nextInt() 方法的運(yùn)行原理是在掃描到“空白符”的時(shí)候,Scanner會(huì)把“空白符”前面的數(shù)據(jù)讀取走并且在緩沖區(qū)中遺留一個(gè)空白符“\r”。
而 nextLint() 方法的運(yùn)行原理則是會(huì)把空白符好一同讀取。
明白 nextInt() 方法以及 nextLine() 方法的運(yùn)行原理之后,就不難理解為什么在使用nextInt()之后無法使用 nextLine() 的問題了。
因?yàn)椋?dāng) nextInt() 運(yùn)行結(jié)束后,緩沖區(qū)會(huì)遺留一個(gè)空白符號(hào),而后到 nextLine() 運(yùn)行的時(shí)候,則會(huì)把這個(gè)空白符號(hào)讀取進(jìn)去,而 Scanner 因?yàn)閽呙璧娇瞻追?,判定掃描結(jié)束,所以,會(huì)出現(xiàn)使用 nextInt() 之后 nextLine() 無法運(yùn)行的現(xiàn)象。
實(shí)際上,nextLine() 并非沒有運(yùn)行,而是已經(jīng)結(jié)束了運(yùn)行。
因此要解決這個(gè)問題,可以在要運(yùn)行的 nextLine() 方法之前添加多一條 nextLine() 語(yǔ)句,已讀取 nextInt() 遺留的空白符。