对于下面的程序,为什么显示都结果是“i=58,j=55”? 高手指教一下。
import java.until.*;
 
public class Bool{
  public static void main(String[] args){
    Random rand = new Random(47);
    int i=rand.nextInt(100);
    int i=rand.nextInt(100);
    System.out.println("i="+1);
    System.out.println("j="+j);
    }/*Output:
i=58;
j=55;
*///:~

解决方案 »

  1.   

    我还很菜,对于nextInt()方法也不是很了解。
      

  2.   

    Random是随机数。int i=rand.nextInt(100):表示从0到100中随机取出一个整数。但是i和j是分别取出,它们没有什么关系。
      

  3.   

    每次都以47作为种子,得到的当然是每次都是i=58; j=55;
    Random rand=new Random();
    int i=rand.nextInt(100); 
    int j=rand.nextInt(100);
    这样才会得到0~100不同的数.
      

  4.   

    首先我改正一下:import java.util.*;public class Bool {
      public static void main(String[] args){ 
        Random rand = new Random(47); 
        int i=rand.nextInt(100); 
        int j=rand.nextInt(100); 
        System.out.println("i="+i); 
        System.out.println("j="+j); 
      }
    }你是以47作为种子的,所以每次结果都会一样的
    大致形象的解释是:
    每次结果都在前一个值的基础之上产生一个valueOff偏移值,
    也就是说首先i在种子47之上产生一个valueOff,然后在跟种子
    通过算法运算得到了58,这个结果会保存一个变量value里,
    再然后返回结果给i,而j在保存的value基础之上通过算法运算
    又产生一个新的valueOff,然后在跟value进行一定的运算得到结果
    保存到value里面,然后在返回结果给j,如此就是说每次结果都会相同
    sun公司有自己的一套产生偏移值的算法,具体算法你看源代码就知道了。
    形象的说47就像你播得第一粒种子,该种子可以产生其他的新种子,每次都
    会储存到value里,然后由value产生下一粒,既而每次都应该是相同的daima222 应该明白了吧你可以Random rand = new Random();那么每次就不一样啦,因为产生
    执行的valueOff都会不一样的
    或者可以是Random rand = new Random(new Date().getTime());
    也会是每次结果不一样的
    具体情况请参看jdk下的src
      
      

  5.   

    首先我改正一下:import java.util.*;public class Bool {
      public static void main(String[] args){ 
        Random rand = new Random(47); 
        int i=rand.nextInt(100); 
        int j=rand.nextInt(100); 
        System.out.println("i="+i); 
        System.out.println("j="+j); 
      }
    }你是以47作为种子的,所以每次结果都会一样的
    大致形象的解释是:
    每次结果都在前一个值的基础之上产生一个valueOff偏移值,
    也就是说首先i在种子47之上产生一个valueOff,然后在跟种子
    通过算法运算得到了58,这个结果会保存一个变量value里,
    再然后返回结果给i,而j在保存的value基础之上通过算法运算
    又产生一个新的valueOff,然后在跟value进行一定的运算得到结果
    保存到value里面,然后在返回结果给j,如此就是说每次结果都会相同
    sun公司有自己的一套产生偏移值的算法,具体算法你看源代码就知道了。
    形象的说47就像你播得第一粒种子,该种子可以产生其他的新种子,每次都
    会储存到value里,然后由value产生下一粒,既而每次都应该是相同的daima222 应该明白了吧你可以Random rand = new Random();那么每次就不一样啦,因为产生
    执行的valueOff都会不一样的
    或者可以是Random rand = new Random(new Date().getTime());
    也会是每次结果不一样的
    具体情况请参看jdk下的src
      
      

  6.   

    jamesliulyc 解释的好详细,学习中....
      

  7.   

    这中问题还是自己多看看API就明白了。
    别人给你的答案不如自己理解的深刻。
      

  8.   

    每次都以47作为种子,得到的当然是每次都是i=58; j=55; 
    Random rand=new Random(); 
    int i=rand.nextInt(100); 
    int j=rand.nextInt(100); 
    这样才会得到0~100不同的数.
      

  9.   


    就是这个样子...楼主是不是看的Thinking in java啊...里面的例子基本都用47做种子
      

  10.   

    5楼说的很详细了,看到楼主的问题我也去查了API,学习Java要常看API。
      

  11.   

    搂主有三个错误import java.util.*;                  public class Bool{
      public static void main(String[] args){
        Random rand = new Random(47);
        int i=rand.nextInt(100);
        int j=rand.nextInt(100);
        System.out.println("i="+1);
        System.out.println("j="+j);
        }
    }
      

  12.   

    synchronized public void setSeed(long seed) {
           this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
           haveNextNextGaussian = false;
     }