最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Scanner中nextInt()、nextLine()等方法總結(jié)與問(wèn)題解決

 更新時(shí)間:2022年11月15日 10:23:43   作者:檸心語(yǔ)冰  
這篇文章主要介紹了關(guān)于Scanner中nextInt()、nextLine()等方法總結(jié)與問(wèn)題解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。

Scanner.next?() 方法介紹

Scanner.next?() 有很多種方法,具體名稱與內(nèi)容可以見(jiàn)下表格:

關(guān)于Scanner.next?() 的輸入問(wèn)題與分析

讓我們先來(lái)用代碼直觀地感受一下使用scanner時(shí)經(jīng)常出現(xiàn)的問(wèn)題:

Scanner scanner = new Scanner(System.in);

System.out.printf("請(qǐng)輸入你的名字: ");
String name = scanner.nextLine();

System.out.printf("請(qǐng)輸入你的出生年份 : ");
int age = scanner.nextInt();

System.out.printf("請(qǐng)輸入你喜歡的花 : ");
String nan = scanner.nextLine();  

System.out.printf( "你的名字是: " +name+ "%n 你的出生年份是 :" +age+ "%n 你喜歡的花是 :" +nan );

乍一看,沒(méi)有什么問(wèn)題,就是三個(gè)簡(jiǎn)單的輸入與讀取。但是讓我們來(lái)看看結(jié)果輸出:

請(qǐng)輸入你的名字: asd
請(qǐng)輸入你的出生年份 12
請(qǐng)輸入你喜歡的花 : 你的名字是: asd
 你的出生年份是 :12
 你喜歡的花是 :
Process finished with exit code 0

很明顯,最后一個(gè)在還沒(méi)有來(lái)得及輸入的情況下,直接執(zhí)行了輸出程序,然后結(jié)束了整個(gè)程序。

這是為什么呢?

這就涉及到上邊表格中提到的Scanner.next?()方法結(jié)束接收條件。我們?cè)谥貜?fù)使用Scanner的時(shí)候,其實(shí)是在向同一個(gè)緩存區(qū)內(nèi)輸入數(shù)據(jù),而所謂結(jié)束接收條件其實(shí)就是不同的“斷句符號(hào)”。讓我們來(lái)快速地看一個(gè)例子與圖解加深一下理解。

Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
String age = scanner.nextLine();
String nan = scanner.nextLine();
System.out.printf( "name: " +name+ "%n age: " +age+ "%n nan: " +nan );

結(jié)果輸出:
12
23
21
name: 12
 age: 23
 nan: 21
Process finished with exit code 0

此時(shí)緩存區(qū)里內(nèi)容是:12\n23\n21\n 。而這三個(gè)數(shù)字為什么會(huì)被精準(zhǔn)的分配到變量name、age、nan中呢?就是因?yàn)閟canner.nextLine();函數(shù)的結(jié)束接收條件為\n。這個(gè)函數(shù)可以在接收到鍵盤輸出\n后停止接收,運(yùn)行下一個(gè)程序。而\n正是我們?cè)谌粘3绦蛑羞M(jìn)入下一個(gè)輸入時(shí)按的回車。

同理可得,上面那個(gè)程序如果正常輸入的話,緩存區(qū)里的內(nèi)容是:asd\n12\nCornflower\n 。那么問(wèn)題出現(xiàn)了,在第二個(gè)程序中我們用的都是scanner.nextLine(); ,他會(huì)根據(jù)\n的位置完整地讀取每一份數(shù)據(jù)并賦值給對(duì)應(yīng)變量。而現(xiàn)在,我們用的分別是scanner.nextLine(); 、 scanner.nextInt(); 、 scanner.nextLine(); ,他們的結(jié)束接收條件分別為 \n 、數(shù)值、\n 。

此時(shí)三個(gè)函數(shù)就會(huì)將數(shù)據(jù)讀成這樣:

很明顯第二個(gè)scanner.nextInt()在遇到數(shù)值12后就已經(jīng)結(jié)束接收,而就在我按下“進(jìn)行下一個(gè)輸入”的回車時(shí),直接結(jié)束了第三個(gè) scanner.nextLine();的接收。

因此這就是為什么會(huì)出現(xiàn)后面的數(shù)據(jù)還沒(méi)有來(lái)得及輸入,程序就已經(jīng)結(jié)束的情況。

解決方法

那有沒(méi)有解決辦法呢?

肯定的好吧

方法很簡(jiǎn)單,就是在第二個(gè)和第三個(gè)方法之間加簡(jiǎn)單的 scanner.nextLine(); 方法 。這樣那個(gè)被錯(cuò)誤地結(jié)束第三個(gè)方法接收的“\n”,就被其他方法替代了。而第三個(gè)scanner.nextLine();也就可以正常接收數(shù)據(jù)了。

這是加上scanner.nextLine();后的緩存區(qū)讀取情況:

這是加上scanner.nextLine();后程序以及運(yùn)行結(jié)果:

Scanner scanner = new Scanner(System.in);

System.out.printf("請(qǐng)輸入你的名字: ");
String name = scanner.nextLine();

System.out.printf("請(qǐng)輸入你的出生年份 ");
int age = scanner.nextInt();
scanner.nextLine();        //加的

System.out.printf("請(qǐng)輸入你喜歡的花 : ");
String nan = scanner.nextLine();
System.out.printf( "你的名字是: " +name+ "%n 你的出生年份是 :" +age+ "%n 你喜歡的花是 :" +nan );

請(qǐng)輸入你的名字: asd
請(qǐng)輸入你的出生年份 12
請(qǐng)輸入你喜歡的花 : Cornflower
你的名字是: asd
 你的出生年份是 :12
 你喜歡的花是 :Cornflower
Process finished with exit code 0

這回就很愉快地輸入并輸出啦!

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

相關(guān)文章

  • 打開(kāi)IDEA配置Spring項(xiàng)目時(shí)發(fā)現(xiàn)沒(méi)有選擇java?1.8的選項(xiàng)解決方案

    打開(kāi)IDEA配置Spring項(xiàng)目時(shí)發(fā)現(xiàn)沒(méi)有選擇java?1.8的選項(xiàng)解決方案

    這篇文章主要介紹了打開(kāi)IDEA配置Spring項(xiàng)目時(shí)發(fā)現(xiàn)沒(méi)有選擇java?1.8的選項(xiàng)的解決方案,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者idea具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2025-03-03
  • SpringBoot如何注冊(cè)Servlet、Filter、Listener的幾種方式

    SpringBoot如何注冊(cè)Servlet、Filter、Listener的幾種方式

    在Servlet 3.0之前都是使用web.xml文件進(jìn)行配置,這篇文章主要介紹了SpringBoot如何注冊(cè)Servlet、Filter、Listener的幾種方式,在Servlet 3.0之前都是使用web.xml文件進(jìn)行配置,
    2018-10-10
  • SpringBoot 整合Jest實(shí)例代碼講解

    SpringBoot 整合Jest實(shí)例代碼講解

    本文通過(guò)實(shí)例代碼給大家介紹了SpringBoot 整合Jest的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • SpringBoot?mybatis-plus使用json字段實(shí)戰(zhàn)指南

    SpringBoot?mybatis-plus使用json字段實(shí)戰(zhàn)指南

    在現(xiàn)代應(yīng)用開(kāi)發(fā)中經(jīng)常會(huì)使用JSON格式存儲(chǔ)和傳輸數(shù)據(jù),為了便捷地處理數(shù)據(jù)庫(kù)中的JSON字段,MyBatis-Plus提供了強(qiáng)大的JSON處理器,這篇文章主要給大家介紹了關(guān)于SpringBoot?mybatis-plus使用json字段的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Java數(shù)字圖像處理之圖像灰度處理

    Java數(shù)字圖像處理之圖像灰度處理

    這篇文章主要為大家詳細(xì)介紹了Java數(shù)字圖像處理之圖像灰度處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java?嵌入數(shù)據(jù)引擎從?SQLite?到?SPL詳解

    Java?嵌入數(shù)據(jù)引擎從?SQLite?到?SPL詳解

    這篇文章主要介紹了Java?嵌入數(shù)據(jù)引擎:從?SQLite?到?SPL,SQLite架構(gòu)簡(jiǎn)單,其核心雖然是C語(yǔ)言開(kāi)發(fā)的,但封裝得比較好,對(duì)外呈現(xiàn)為一個(gè)小巧的Jar包,能方便地集成在Java應(yīng)用中,本文給大家介紹的非常詳細(xì),需要的朋友參考下
    2022-07-07
  • ElasticSearch?深度分頁(yè)示例解析

    ElasticSearch?深度分頁(yè)示例解析

    這篇文章主要為大家介紹了ElasticSearch?深度分頁(yè)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 淺談spring boot使用thymeleaf版本的問(wèn)題

    淺談spring boot使用thymeleaf版本的問(wèn)題

    這篇文章主要介紹了spring boot使用thymeleaf版本的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring如何實(shí)現(xiàn)管理事務(wù)

    Spring如何實(shí)現(xiàn)管理事務(wù)

    Spring通過(guò)編程式事務(wù)和聲明式事務(wù)管理來(lái)控制事務(wù)的邊界和行為,聲明式事務(wù)管理通過(guò)@Transactional注解實(shí)現(xiàn),提供了豐富的配置選項(xiàng)來(lái)控制事務(wù)的行為,如傳播行為、隔離級(jí)別、超時(shí)時(shí)間和回滾規(guī)則
    2024-11-11
  • 解讀什么是構(gòu)造方法?能否被重寫或重載?

    解讀什么是構(gòu)造方法?能否被重寫或重載?

    這篇文章主要介紹了什么是構(gòu)造方法?能否被重寫或重載問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評(píng)論

利川市| 微山县| 修文县| 深泽县| 二手房| 赤峰市| 启东市| 鱼台县| 逊克县| 陇川县| 鹰潭市| 郴州市| 弥渡县| 法库县| 肇源县| 金溪县| 阿坝县| 綦江县| 民县| 六安市| 惠州市| 陆良县| 桑日县| 民勤县| 碌曲县| 四会市| 新泰市| 嘉祥县| 台东市| 赣榆县| 佛坪县| 安吉县| 金平| 肥城市| 麻阳| 法库县| 彭山县| 手游| 永安市| 延长县| 西峡县|