<bdo id="7i6gw"></bdo>
    1. 歡迎您訪問(wèn)新華電腦學(xué)校官方網(wǎng)站!官網(wǎng)

      您的位置:首頁(yè)>新聞資訊>就業(yè)新聞

      在阿里筆試中拿了0分,竟是因?yàn)榉植磺宄﨡ava輸入類nextLine與nex

      發(fā)布時(shí)間:2020-05-22  作者:未知 瀏覽量:117

      以前做算法題,都是實(shí)現(xiàn)一個(gè)方法,需要的參數(shù)會(huì)在方法參數(shù)中直接給出,而且需要的返回值直接在方法中 return 就好了。但是阿里的筆試,需要的參數(shù)居然要到輸入流中讀取,而且返回結(jié)果居然直接輸出到控制臺(tái)上。
      如果沒有見過(guò)這種套路的,當(dāng)使用Java輸入類nextLine方法讀取輸入流中的字符串時(shí),總會(huì)莫名其妙地少讀一部分!那在這里,讓我們新華的專業(yè)講師來(lái)給大家?guī)?lái)一場(chǎng)專業(yè)的分析。
       
      讀取一個(gè)數(shù)字
       
      既然我們要讀取輸入,肯定得用到 Scanner 類,這個(gè)類倒是挺簡(jiǎn)單的,例如,我們需要讀取一個(gè)數(shù)字,可以這樣子設(shè)計(jì)程序。
       
      package test;
       
      import java.util.Scanner;
       
      public class HelloWorld {
       
      public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      int i = sc.nextInt();
      System.out.println("讀取到的數(shù)字是:" + i);
          }
      }
       
      我們隨意輸入一個(gè)數(shù)字 100,控制臺(tái)的輸出也證明了我們的程序可以讀取這個(gè)數(shù)字。
       
      好了,重點(diǎn)來(lái)了!讀取數(shù)字倒沒什么,讀取字符串會(huì)要了老命!讀取數(shù)據(jù)的時(shí)候如果一直嘗試使用nextLine這個(gè)方法來(lái)讀取字符串(如果我們不知道next這個(gè)方法時(shí)),nextLine讀出來(lái)的數(shù)據(jù)總是缺斤少兩!
       
      我們來(lái)還原一下現(xiàn)場(chǎng),需求是這樣的,需要我們讀取一個(gè)數(shù)字,這個(gè)數(shù)字表示輸入字符串的數(shù)量,然后下面跟著的就是一系列需要讀入的字符串了,很多人在做這道題時(shí)想都沒想,大筆一揮,寫下如下代碼:
       
      package test;
       
      import java.util.Scanner;
       
      public class HelloWorld {
       
      public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      int i = sc.nextInt();//讀取的字符串?dāng)?shù)量
      int index = 0;
      String[] array = new String [i];//存放讀取的字符串
      while(index < i) {
      array[index++] = sc.nextLine();
      }
      for (String str : array) {//輸出讀取的字符串
      System.out.println("輸入的字符串:" + str);
      }
          }
      }
       
      理想很美好,現(xiàn)實(shí)很骨感,寫代碼時(shí)光芒萬(wàn)丈,檢查時(shí)卻怨天尤人。這樣的代碼永遠(yuǎn)無(wú)法讀取最后一行輸入的字符串,這是為啥呢?
       
      因?yàn)閚extLine可以接收空格或者tab鍵,其輸入以enter鍵結(jié)束。
       
      程序在通過(guò) nextInt 方法讀取數(shù)字之后,會(huì)留下一個(gè)enter鍵,這個(gè)enter鍵會(huì)被第一個(gè)執(zhí)行的nextLine函數(shù)接收,這導(dǎo)致我們能夠讀取的數(shù)據(jù)永遠(yuǎn)少一行(nextLine少執(zhí)行一次),同時(shí)也能解釋為什么字符串?dāng)?shù)組第一個(gè)元素為空。
       
      這個(gè)問(wèn)題怎么解決呢?Java 輸入類讀取字符串的函數(shù)并非只有nextLine,通過(guò)next也能實(shí)現(xiàn)類似的功能,只不過(guò)next與nextLine不同,next不會(huì)接收回車符,tab或者空格鍵。在我們使用 nextLine時(shí),需要注意前面是否有enter鍵,如果有,就會(huì)被nextLine吸收,從而造成bug!
       
      既然明白了nextLine與next的原理,解決問(wèn)題就變得簡(jiǎn)單了,將讀取字符串的函數(shù)由nextLine改為next便可,這樣就不會(huì)吸收nextInt留下的enter鍵了。改進(jìn)過(guò)的程序如下:
       
      package test;
       
      import java.util.Scanner;
       
      public class HelloWorld {
       
      public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      int i = sc.nextInt();//讀取的字符串?dāng)?shù)量
      int index = 0;
      String[] array = new String [i];//存放讀取的字符串
      while(index < i) {
      array[index++] = sc.next();
      }
      for (String str : array) {//輸出讀取的字符串
      System.out.println("輸入的字符串:" + str);
      }
          }
      }
       
      總結(jié)
       
      最后我們?cè)賮?lái)總結(jié)一下nextLine與next兩個(gè)方法的區(qū)別:
       
      next不會(huì)接收回車符,tab或者空格鍵,在接收有效數(shù)據(jù)之前會(huì)忽略這些符號(hào),若已經(jīng)讀取了有效數(shù)據(jù),遇到這些符號(hào)會(huì)直接退出,而nextLine 可以接收空格或者tab鍵,其輸入以 enter 鍵結(jié)束。
       
      如果也想像一名資深程序員一樣解決如此專業(yè)的問(wèn)題,快到石家莊新華電腦學(xué)校來(lái)學(xué)習(xí)吧!

      常見問(wèn)題

      熱招專業(yè)

      在線報(bào)名

      AI+游戲動(dòng)漫與影視制作

      電話:400-900-8780

      地址:河北省石家莊市橋西區(qū)南二環(huán)西路199號(hào),南二環(huán)與紅旗大街交叉口西行300米路北

      冀ICP備11012044號(hào) | 版權(quán)所有:石家莊新華電腦學(xué)校

      工信部備案管理系統(tǒng)網(wǎng)址:https://beian.miit.gov.cn/

      • 官方快手賬號(hào)

      • 官方視頻號(hào)

      • 官方公眾號(hào)

      網(wǎng)站聲明:任何企業(yè)或者個(gè)人以任何形式復(fù)制或傳遞本網(wǎng)站所載述的域名商標(biāo)、文字、視像及聲音內(nèi)容、圖形及圖像應(yīng)當(dāng)注明來(lái)源于本網(wǎng)站

      日本一区高清一本大道_一级在线真人黄色毛片_国产白丝无码免费视频_久久久久久久久久经典

        <bdo id="7i6gw"></bdo>
      1. 黔江区| 家居| 郴州市| 崇明县| 博客| 东山县| 朔州市| 鹤山市| 酒泉市| 雷波县| 咸阳市| 湘乡市| 左权县| 益阳市| 腾冲县| 开封县| 蒙阴县| 上林县| 托克逊县| 托克逊县| 开鲁县| 武宣县| 连云港市| 扶风县| 白朗县| 渭南市| 多伦县| 昭苏县| 渭源县| 正镶白旗| 龙岩市| 平顶山市| 鸡东县| 久治县| 乃东县| 淄博市| 襄樊市| 临沂市| 安龙县| 大渡口区| 井研县| http://444 http://444 http://444