/**
*
*//**
* @author Administrator
*
*/
import static myutil.Print.*;
import java.util.*;
interface Cantoss{
void toss();
}interface CantossFactory {
Cantoss get();
}class Dice implements Cantoss{
private static final Random rand=new Random(48);
public void toss(){
printnb(rand.nextInt(6)+1+" ");
}
}class DiceFactory implements CantossFactory{
public Cantoss get(){
return new Dice();
}
}
public class Ex19 { /**
* @param args
*/
public static void playToss(CantossFactory ctf){
ctf.get().toss();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int ii=0;ii<10;ii++)
playToss(new DiceFactory()); //play 10 times
}}当我把private static final Random rand=new Random(48);语句去掉static后产出的数字就都是3,每次运行都是三,请问这是为什么呢,谢谢
*
*//**
* @author Administrator
*
*/
import static myutil.Print.*;
import java.util.*;
interface Cantoss{
void toss();
}interface CantossFactory {
Cantoss get();
}class Dice implements Cantoss{
private static final Random rand=new Random(48);
public void toss(){
printnb(rand.nextInt(6)+1+" ");
}
}class DiceFactory implements CantossFactory{
public Cantoss get(){
return new Dice();
}
}
public class Ex19 { /**
* @param args
*/
public static void playToss(CantossFactory ctf){
ctf.get().toss();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int ii=0;ii<10;ii++)
playToss(new DiceFactory()); //play 10 times
}}当我把private static final Random rand=new Random(48);语句去掉static后产出的数字就都是3,每次运行都是三,请问这是为什么呢,谢谢
如果去掉static 每个Dice 维护它自己的一个final的Random rand,这些rand的种子都是一样的,而且都是进行rand.nextInt(6),所以结果是相同的,都是3;
如果加上static那么所有的Dice都使用同一个Random rand,所以进行rand.nextInt(6),结果就是正确的了
Random rand=new Random();
public void toss(){
System.out.println(rand.nextInt(6)+1+" ");
}
}构造方法里放了个48
空的Random(),实际上插入了一个当前时间作为种子
import java.util.*;
public class Ex19 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random r=new Random(48);
for(int ii=0;ii<20;ii++){
System.out.print (r.nextInt(6)+" ");
}
}}