//: 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() + " ");
}
}
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() + " ");
}
}
不乱啊 ,是两段代码,一个基类,一个导出类,而且导出类实现了Readable接口。我不明白的是导出类的read方法调用基类的next方法,怎么主方法会打印所有的随机浮点数呢?
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哪来的啊。求解
这句定义了一个Scanner,scanner的源是AdaptedRandomDoubles,并且count是7
下面,while(s.hasNextDouble()),hasNextDouble()每次都调用scanner源的read()方法,当read方法返回有效值时,s.hasNextDouble返回true,s.nextDouble()返回刚读到的值,所以7个随机数依次被读出并打印出来。
不过你可以在read方法的那加个断点,调试,看看那个调用栈就明白了。
不好意思,是rand.nextDouble().打快了。