【Java】Scanner類nextInt後使用nextLine無法讀取輸入

來源:互聯網
上載者:User

標籤:技術   span   輸入   image   ann   掃描   round   logs   就會   

首先,我們先介紹一下,在學習Java語言,對於字串的輸入,由於Scanner.next()函數無法輸入空格及斷行符號,此時,我們就必須要用Scanner.nextLine()解決這類問題,

在使用過程中,我們會發現nextInt()和nextLine連用,出現這個問題:

 

 

在輸入一個int資料之後,就會輸出,而字串完全沒有輸入......

 

然後去網上查了一些資料,看了一些論壇,瞭解了一些其中的原理,整理一下。

首先,Scanner是一個掃描器,它掃描資料都是去記憶體中一塊緩衝區中進行掃描並讀入資料的,而我們在控制台中輸入的資料也都是被先存入緩衝區中等待掃描器的掃描讀取。這個掃描器在掃描過程中判斷停止的依據就是“空白符”,空格啊,斷行符號啊什麼的都算做是空白符。

nextInt()方法在掃描到空白符的時候會將前面的資料讀取走,但會丟下空白符“\r”在緩衝區中,但是,nextLine()方法在掃描的時候會將掃描到的空白符一同清理掉。

瞭解了這兩個方法特性和區別,就知道了上邊的代碼究竟是怎麼回事,以及知道瞭解決的方法。像是上邊的代碼nextInt()方法之後在緩衝區中留下了“\r”,然後nextLine()方法再去緩衝區找資料的時候首先看到了“\r”,然後就把這個“\r”掃描接收進來,並在緩衝區內清除掉。其實,nextLine()方法是執行過的,並沒有不執行。

知道了原理,那麼解決方案就比較簡單了:

 

 

在nextInt()結束後,加上一句scan.nextLine()。

 

【Java】Scanner類nextInt後使用nextLine無法讀取輸入

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.