欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年10月30日 10:40:41   作者:wonder4work  
這篇文章主要介紹了Java Scanner對象中hasNext()與next()方法的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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

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

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

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

這是怎么回事?

原因:

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

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

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

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

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

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

最近在學(xué)習(xí)在??途W(wǎng)上面做一些算法練習(xí)題.

發(fā)現(xiàn)在一些情況下寫好的Java代碼在本機運行時正常的結(jié)果,

但是就是無法通過牛客網(wǎng)的測試用例。

經(jīng)過檢查,最終定位到讀取測試用例的位置上,發(fā)現(xiàn):

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

通過在網(wǎng)上搜索,獲取到這兩種方法的區(qū)別:

在檢查輸入流時:

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

比如當(dāng)前我們有如下測試用例:

7 15 9 5

這個測試用例在??途W(wǎng)上是以文件的形式進(jìn)行存儲的.

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

7 15 9 5\n

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

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

建議方案

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

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

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Struts2源碼分析之ParametersInterceptor攔截器

    Struts2源碼分析之ParametersInterceptor攔截器

    這篇文章主要介紹了Struts2源碼分析之ParametersInterceptor攔截器,ParametersInterceptor攔截器其主要功能是把ActionContext中的請求參數(shù)設(shè)置到ValueStack中,,需要的朋友可以參考下
    2019-06-06
  • Kylin對接JDBC集成Zepplin的實現(xiàn)方法

    Kylin對接JDBC集成Zepplin的實現(xiàn)方法

    Zepplin是一個非常好用的編輯器工具,通過自定義編碼可以實現(xiàn)更多的業(yè)務(wù)邏輯,接下來通過本文給大家分享Kylin對接JDBC和Zepplin的操作代碼,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • SpringCloud?分布式微服務(wù)架構(gòu)操作步驟

    SpringCloud?分布式微服務(wù)架構(gòu)操作步驟

    SpringCloud是一種微服務(wù)的框架,利用它我們可以去做分布式服務(wù)開發(fā),這篇文章主要介紹了SpringCloud?分布式微服務(wù)架構(gòu),需要的朋友可以參考下
    2022-07-07
  • 深入了解Java定時器中的Timer的原理

    深入了解Java定時器中的Timer的原理

    這篇文章主要介紹了Java定時器中的Timer的原理。Timer主要用于Java線程里指定時間或周期運行任務(wù),它是線程安全的,但不提供實時性(real-time)保證。接下來就跟隨小編一起深入了解Timer吧
    2022-01-01
  • springboot操作阿里云OSS實現(xiàn)文件上傳,下載,刪除功能

    springboot操作阿里云OSS實現(xiàn)文件上傳,下載,刪除功能

    這篇文章主要介紹了springboot操作阿里云OSS實現(xiàn)文件上傳,下載,刪除功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Struts2 Result 返回JSON對象詳解

    Struts2 Result 返回JSON對象詳解

    這篇文章主要講解Struts2返回JSON對象的兩種方式,講的比較詳細(xì),希望能給大家做一個參考。
    2016-06-06
  • Java之 TreeSet的詳細(xì)使用說明

    Java之 TreeSet的詳細(xì)使用說明

    這篇文章主要介紹了Java之 TreeSet的詳細(xì)使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java并發(fā)編程之閉鎖與柵欄的實現(xiàn)

    Java并發(fā)編程之閉鎖與柵欄的實現(xiàn)

    這篇文章主要介紹了Java并發(fā)編程之閉鎖與柵欄的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 關(guān)于mybatis使用${}時sql注入的問題

    關(guān)于mybatis使用${}時sql注入的問題

    這篇文章主要介紹了關(guān)于mybatis使用${}時sql注入的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java將圖片分割為幾個部分示例

    java將圖片分割為幾個部分示例

    這篇文章主要介紹了java將圖片分割為幾個部分示例,需要的朋友可以參考下
    2014-04-04

最新評論