package untitled1;
import java.util.Random;
public class Untitled1 {
    public static void main(String[] args) {
      Random r=new Random(47);
      int b=r.nextInt(100);
      int c=r.nextInt(100);
      System.out.println(b);
      System.out.println(c);
    }
}为什么输出的随机数都不会改变呢?
例如
58
55
一直都是那样呢?
Random r=new Random(47);
Random(47);这地方有没有参数有什么区别吗?
有参数的时候可以产生会改变的随机数。

解决方案 »

  1.   

    Random r=new Random(47);
    改成Random r=new Random();
    random()說是個隨機函數,其實他是有算法的- -|、
    你把47當作初始值,他每次會從47開始算,但算法是一樣的結果當然不變
    你不賦值的話他會隨機產生一個值從再開始算
      

  2.   

    一楼正确。
    可以用
    Random r = new Random(System.currentTimeMillions());
      

  3.   

    你看看API文档中 Random 的用法
      

  4.   

    Random r = new Random(System.currentTimeMillions());
    等同于
    Random   r=new   Random(); Random 的构造是new Random(long seed); 
    给它一个种子他给你一个数列。如果种子是一个固定值那么产生的数列也是固定数列。
      

  5.   

    参考jdk源码,带参构造函数是由一个种子的,根据种子来确定随机数
     public Random(long seed) {
            this.seed = new AtomicLong(0L);
            setSeed(seed);
        }
    无参构造函数,是直接使用当前时间来作为种子
     public Random() { this(++seedUniquifier + System.nanoTime()); }参考nextInt源代码
     public int nextInt(int n) {
            if (n <= 0)
                throw new IllegalArgumentException("n must be positive");        if ((n & -n) == n)  // i.e., n is a power of 2
                return (int)((n * (long)next(31)) >> 31);        int bits, val;
            do {
                bits = next(31);
                val = bits % n;
            } while (bits - val + (n-1) < 0);
            return val;
        }  protected int next(int bits) {
            long oldseed, nextseed;
            AtomicLong seed = this.seed;
            do {
        oldseed = seed.get();
        nextseed = (oldseed * multiplier + addend) & mask;
            } while (!seed.compareAndSet(oldseed, nextseed));
            return (int)(nextseed >>> (48 - bits));
        }