//: RandomDoubles.java
import java.util.Random;public class RandomDoubles
{
     private static Random rand = new Random(47);
     public double next() { return next.nextDouble(); }
     public static void main(String[] args)
     {
          RandomDoubles rd = new RandomDoubles();
          for(int i = 0; i < 7; i++)
             System.out.print(rd.next() + " ");
     }
}//:AdaptedRandomDoubles.java
import java.nio.*;
import java.util.*;public class AdaptedRandomDoubles extends RandomDoubles
  implements Readable
{
     private int count;
     public AdaptedRandomDoubles(int count)
     {
          this.count = count;
     }
     public int read(CharBuffer cb)
     {
           if(count-- == 0)
            return -1;
           String result = Double.toString(next()) + " ";//就是这一句我不明白,基类RandomDouble的next方法不是只返回一个随机浮点数么?为什么在main方法中能将基类产生的所有随机浮点数输出来呢?是不是因为Double这个包装器的问题?
           cb.append(result);
           return result.length();
     }
     public static void main(String[] args)
     {
           Scanner s = new Scanner(new AdaptedRandomDoubles(7));
           while(s.hasNextDouble())
             System.out.print(s.nextDouble() + " ");
     }
}

解决方案 »

  1.   

    那不是基类的main方法打印7次么?next方法只产生一个随机浮点数。
      

  2.   

    那不是基类的main方法打印7次么?next方法只产生一个随机浮点数。
      

  3.   


    不乱啊 ,是两段代码,一个基类,一个导出类,而且导出类实现了Readable接口。我不明白的是导出类的read方法调用基类的next方法,怎么主方法会打印所有的随机浮点数呢?
      

  4.   

    //: RandomDoubles.java
    import java.util.Random;public class RandomDoubles
    {
    private static Random rand = new Random(47);
    public double next() { return next.nextDouble(); }
    public static void main(String[] args)
    {
    RandomDoubles rd = new RandomDoubles();
    for(int i = 0; i < 7; i++)
    System.out.print(rd.next() + " ");
    }
    }
    弱弱的问下楼主,这个类里的next()方法return next.nextDouble(); 那个next哪来的啊。求解
      

  5.   

    Scanner s = new Scanner(new AdaptedRandomDoubles(7));
    这句定义了一个Scanner,scanner的源是AdaptedRandomDoubles,并且count是7
    下面,while(s.hasNextDouble()),hasNextDouble()每次都调用scanner源的read()方法,当read方法返回有效值时,s.hasNextDouble返回true,s.nextDouble()返回刚读到的值,所以7个随机数依次被读出并打印出来。
      

  6.   

    不知道怎么在回复里面插个调用栈的图片
    不过你可以在read方法的那加个断点,调试,看看那个调用栈就明白了。
      

  7.   


    不好意思,是rand.nextDouble().打快了。