Random rand=new Random(47);
47是什么啊?有什么作用?

解决方案 »

  1.   

    Random
    public Random(long seed)使用单个 long 种子创建一个新随机数生成器: 
     public Random(long seed) { setSeed(seed); }next 方法使用它来保存随机数生成器的状态。 参数:
    seed - 初始种子。
    另请参见:
    setSeed(long)
    方法详细信息 setSeed
    public void setSeed(long seed)使用单个 long 种子设置此随机数生成器的种子。setSeed 的常规协定是它更改此随机数生成器对象的状态,使其状态好像是刚刚使用参数 seed 作为种子创建它的状态一样。Random 类按如下方式实现 setSeed 方法: 
    synchronized public void setSeed(long seed) {
           this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
           haveNextNextGaussian = false;
     }由 Random 类实现的 setSeed 恰好只使用 48 位的给定种子。但是,通常重写方法可能使用 long 参数的所有 64 位作为种子值。 注:尽管种子值是一个基本的 AtomicLong,但仍必须对此方法同步,确保 haveNextNextGaussian 的语义正确。 参数:
    seed - 初始种子。
      

  2.   

    Random rand = new Random(47);(47被Bruce Eckel成为魔幻数字)  此时若 int k = rand.nextInt()+1; 每次程序的运行k都会得到相同的值。若 int k = rand.nextInt(100)+1; 返回一个伪随机数,它是取自此随机数生成器序列的在 0(包括)和100(不包括)之间均匀分布的 int 值。nextInt 的常规协定是,伪随机地生成并返回指定范围中的一个 int 值。所有可能的 n 个 int 值的生成概率(大致)相同。此时每次程序运行 k 也会得到相同的值。
      

  3.   

    Random rand = new Random(47); 
    47是种子数,是Random在开始计算时需要的基数
    在给定同样的种子数时,rand生成的所有随机数序列是固定的
      

  4.   

    初学提问
    按照8楼大大的说法,是不是说:
    Random rand = new Random(47);
    Random ra = new Random(47);
    int[] a = new int[50];
    int[] b = new int[50];
    for(int i=0;i<a.length;i++){
        a[i]=rand.nextInt(100)+1;
        b[i]=ra.nextInt(100)+1;
    }赋值之后,a和b是完全相同的2个数组?
      

  5.   

    引用doc说明public Random(long seed){ public Random(long seed) {// Set pseudorandom(伪随即码)
    setSeed(seed);
    } public Random() {//如果为空,取系统时钟(毫秒)
    this(System.currentTimeMillis());
    } synchronized protected int next(int bits) {
    seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
    return (int) (seed >>> (48 - bits));
    } 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;
    }所以 random(n) 预先指定了pseudorandom(伪随即码)
    nexInt(int m) m指定了随即数上限.
      

  6.   

    肯定不一样了,47只是个初始的值,
    每次调用int(int bits)它都会改变的
      

  7.   

    只要给定相同的种子,序列是完全相同的。所以肯定是相同的数组。所以JAVA另外提供了SecureRandom类