乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      我對(duì)Readable的理解

       鳳舞天煌 2007-11-12
      ======Readable是java.lang里面的一個(gè)接口,它是一個(gè)字符源。閱讀方法的調(diào)用能夠通過(guò)CharBuffer使用Readable的字符。
      ======該接口只有一個(gè)方法,int read(CharBuffer cb).
      ======該接口是單獨(dú)為Scanner創(chuàng)建的,以使得Scanner不必將參數(shù)局限為某個(gè)特定的類,因此,通過(guò)這種方式,Scanner不僅僅能從String,File,imputStream中讀入數(shù)據(jù),而且可以從任何繼承自Readable的類中讀入!
      ======================================來(lái)看一個(gè)程序=========================================
      import java.nio.*;
      import java.util.*;
      public class RandomWords implements Readable {
         private static Random rand = new Random(47);
         private static final char[] capitals =
           "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
         private static final char[] lowers =
           "abcdefghijklmnopqrstuvwxyz".toCharArray();
         private static final char[] vowels =
           "aeiou".toCharArray();
         private int count;
         public RandomWords(int count) { this.count = count; }
         public int read(CharBuffer cb) {   //這里覆蓋Readable的read方法
          //把判斷語(yǔ)句放在最前面,一執(zhí)行,條件就成立的話CharBuffer中沒有字符,調(diào)用hasNext就會(huì)返回假
           if(count-- == 0)    
             return -1; // Indicates end of input
           cb.append(capitals[rand.nextInt(capitals.length)]);
           for(int i = 0; i < 4; i++) {
             cb.append(vowels[rand.nextInt(vowels.length)]);
             cb.append(lowers[rand.nextInt(lowers.length)]);
           }
           cb.append(" ");    /*用空格來(lái)做為定界符,把CharBuffer中的字符在空格處裁開,這樣子就會(huì)得到數(shù)個(gè)next()值   */
           return 10; // Number of characters appended
         }
         public static void main(String[] args) {
           Scanner s = new Scanner(new RandomWords(10));
           while(s.hasNext())
             System.out.println(s.next());
         }
      } /* Output:
      Yazeruyac
      Fowenucor
      Goeazimom
      Raeuuacio
      Nuoadesiw
      Hageaikux
      Ruqicibui
      Numasetih
      Kuuuuozog
      Waqizeyoy
      *///:~
      問(wèn)題1:read()返回的是 int型,這個(gè)int表示什么?  
          -- >這個(gè)int只要不等于-1,read()就會(huì)一直被調(diào)用,直到read()拋出異?;蛘遰eturn -1 !
      問(wèn)題1:當(dāng)用Scanner.hasNext()時(shí),是根據(jù)read的返回值來(lái)判斷hasNext()的真假嗎?
         -- >這個(gè)程序中,hasNext()是根據(jù)CharBuffer中是否有字符串來(lái)判斷真假的!與read()的返回值無(wú)關(guān).
      問(wèn)題1:cb.append(" "); //這句有什么作用?  
         -- > 在默認(rèn)的情況下,hasNext()是通過(guò)空白符來(lái)劃分界限的,此句的作用就是,為CharBuffer中的字符串添加空白符!

      問(wèn)題1:return 10; //這里改成return 3或2等正數(shù),為什么程序的輸出結(jié)果都是一樣的呢?  
         -- >read方法的返回值只是一個(gè)標(biāo)記,沒有副作用(只要返回值是除-1外的任何數(shù),不管返回的是什么數(shù),結(jié)果都一樣!),不會(huì)影響緩沖區(qū)的輸出結(jié)果  

      ============================總結(jié):======================================
      第一:當(dāng)創(chuàng)建Scanner對(duì)象,并把它與Readable并聯(lián)時(shí)(如Scanner s = new Scanner(new RandomWords(10));),就會(huì)自動(dòng)調(diào)用Readable的read(),只要從read()方法中返回的值不是 -1
      ,那么就會(huì)不停的調(diào)用read(),直到從read()中返回 -1 或者 拋出異常!

      第二:調(diào)用Scanner.hasNext()時(shí),是看CharBuffer里面有沒有字符,如果有就返回ture,值得注意的是,在read()里面應(yīng)該添加語(yǔ)句:cb.append(" ");   即用空格來(lái)做為定界符,把CharBuffer中的字符在空格處裁開并做為下一次hasNext()判定字符是否為空的起始位置!

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多