一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Scanner對象中hasNext()與next()方法的使用

Java Scanner對象中hasNext()與next()方法的使用

2022-03-07 00:42wonder4work Java教程

這篇文章主要介紹了Java Scanner對象中hasNext()與next()方法的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Scanner對象中hasNext()與next()方法

相信很多像我一樣在剛剛接觸Java的時候都有遇到這樣的問題:

Java Scanner對象中hasNext()與next()方法的使用

我們可能希望的是:先輸出“請輸入:”然后我們就可以在控制臺輸入一個字符串或數字。

但是,事實卻是:控制臺要我們先輸入,輸入后才顯示“請輸入:”。

Java Scanner對象中hasNext()與next()方法的使用

這是怎么回事?

原因:

首先,sc.hasNext()和sc.next()都可以用來輸入

Java Scanner對象中hasNext()與next()方法的使用

Java Scanner對象中hasNext()與next()方法的使用

Java Scanner對象中hasNext()與next()方法的使用

Java Scanner對象中hasNext()與next()方法的使用

我們,可以發現,hasNext()返回的是boolean類型而next()返回的是你輸入的那個值,

sc.hasNext()可以理解為把我們輸入的值存到了sc當中而sc.next()可以理解為從sc中取值,取值后將標識符后移(可以理解為:取完值后這個值就不在了),如果sc中沒有值了,它也會要求輸入一個值(前面說了它們兩都可以輸入)。

然后我們再來分析一下開始的那段程序:

Java Scanner對象中hasNext()與next()方法的使用

首先,進入while循環,sc.hasNext()就要求我們給他輸入一個值,所以就不會輸出“請輸入:”,當我們輸完后,String str = sc.next()中,會從sc中取出我們輸入的那個值返回到str中,如果沒有值,它就會被阻塞要求我們給它一個值。

 

輸入hasNext()和hasNextLine()方法的區別

 

最近在學習在牛客網上面做一些算法練習題.

發現在一些情況下寫好的Java代碼在本機運行時正常的結果,

但是就是無法通過牛客網的測試用例。

經過檢查,最終定位到讀取測試用例的位置上,發現:

Scanner scanner = new Scanner(System.in);
// 當使用 hasNextLine 方法實現判斷是否還有數據時
// 會報錯
while(scanner.hasNextLine()){
// TODO:implement code
}
// 當將 hasNextLine 修改為 hasNext() 方法時
// 程序恢復正常
while(scanner.hasNext()){
// TODO:implement code
}

 

 

通過在網上搜索,獲取到這兩種方法的區別:

在檢查輸入流時:

  • hasNext()方法會判斷接下來是否有非空字符.如果有,則返回true,否則返回false
  • hasNextLine() 方法會根據行匹配模式去判斷接下來是否有一行(包括空行),如果有,則返回true,否則返回false

比如當前我們有如下測試用例:

7 15 9 5

這個測試用例在牛客網上是以文件的形式進行存儲的.

而在 linux 系統中文件的結尾會有一個換行符\n,也就是說從System.in輸入流中真正讀取到的數據流是這樣的:

7 15 9 5\n

程序在處理完5之后,輸入流中就只剩下一個換行符\n了,在處理完5之后while再去進行循環判斷,此時hasNext()方法和hasNextLine()方法去判斷得到的結果就產生了差異.

  • hasNext()方法會認為之后再沒有非空字符,會返回一個false
  • hasNextLine() 方法會認為換行符\n是一個空行,符合行的匹配模式,則會返回一個true,但實際上由于之后再沒有數據了,所以會在讀取輸入流的時候發生異常,從而導致整個運行報錯.

建議方案

采用hasNextXxxx() 的話,后面也要用nextXxxx():

比如前面用hasNextLine(),那么后面要用 nextLine() 來處理輸入;

后面用 nextInt() 方法的話,那么前面要使用 hasNext()方法去判斷.

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq_41750725/article/details/83117297

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲H成年动漫在线观看不卡 | 久久 这里只精品 免费 | 国产自在自拍 | 国产成人亚洲综合a∨婷婷 国产成人亚洲精品乱码在线观看 | 日本在线小视频 | 亚洲精品久久中文字幕 | 涩涩漫画免费 | 国产v在线在线观看羞羞答答 | 国产在线成人a | 亚洲 欧美 日韩 综合 | 青青草国产精品免费 | 91日本| 国产精品亚洲w码日韩中文 国产精品香蕉在线观看不卡 | 911精品国产亚洲日本美国韩国 | 色综合久久九月婷婷色综合 | 日本艳鉧动漫1~6完整版在 | 国产欧美视频在线观看 | 亚洲色图欧美视频 | 99热这里有精品 | 高跟翘臀老师后进式视频 | 亚洲国产欧美在线看片 | 久久国产视频网站 | 亚洲www在线 | 99精品国产成人一区二区 | 国产51| 国产福利兔女郎在线观看 | 91手机看片国产永久免费 | 日韩免费一级 | 欧美vpswindows | 国产精品九九免费视频 | 国产大胆歌舞团网站 | 猫咪maomiav永久网址 | 精品视频免费在线观看 | 国产精品理论片 | 国产精品一久久香蕉产线看 | 青青网在线视频 | 免费视频完整版在线观看网站 | 亚洲精彩视频在线观看 | 精品日产1区2卡三卡麻豆 | 日韩一二三 | 99综合视频|