LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 995|回复: 10

关于Java中产生随机数的疑问?

[复制链接]
发表于 2004-10-26 23:47:17 | 显示全部楼层 |阅读模式
记得以前在C中,如果一个函数中产生了一个随机数(其实那是伪随机数),每次调用这个函数,里面产生的那个随机数都是相同的;

而在Java中我们可以通过一下这段代码来产生一个整型的随机数:
Random rand=new Random(); // 产生一个随机数的生成器;
int t=rand.nextInt(bound); //产生一个随机数

那么,如果我也将上面的这段代码放到一个函数中,产生的这个随机数会不会一样呢?

还有那个seed是什么用途?

c与java产生随机数的机理有什么不同呢?

请兄弟们指教! 多谢!
发表于 2004-10-26 23:54:50 | 显示全部楼层
可以final Random rand = new Random();
 楼主| 发表于 2004-10-27 19:09:09 | 显示全部楼层
前面加了个final有什么用途?
不知兄弟什么意思?
发表于 2004-10-27 21:17:42 | 显示全部楼层
nextInt(seed)会生成0-seed之间的任意整数,比如nextInt(100000)会生成0-100000的任意一个数
 楼主| 发表于 2004-10-27 22:48:00 | 显示全部楼层
不是吧,nextInt(bound),里面的参数是限制产生随机数的范围
new Random(seed),里面的参数才是“种子”

这种子是干什么用的?
发表于 2004-10-31 15:16:51 | 显示全部楼层

看看java的Random实现就知道了

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;
    }
 楼主| 发表于 2004-10-31 22:44:05 | 显示全部楼层
看的我眼晕,什么意思呀?
我明白,next每次运行时,都会产生一个全新的随机数吗?
请兄弟指教!
发表于 2004-11-1 16:14:34 | 显示全部楼层
计算机不能产生真正的随机数,只能得到一个伪随机数列。
种子就是用来生成这个数列的参数。
如果要生成更接近“随机”的数列,可以用系统时间作为种子,这样,每次调用生成函数时得到的伪随机数列都不同,得到的“随机”数也就具有一定的随机性了。
 楼主| 发表于 2004-11-1 21:25:49 | 显示全部楼层
这回我明白了,多谢addone兄弟!

再次表示感谢!
发表于 2004-12-26 19:45:56 | 显示全部楼层
Post by addone
计算机不能产生真正的随机数,只能得到一个伪随机数列。
种子就是用来生成这个数列的参数。
如果要生成更接近“随机”的数列,可以用系统时间作为种子,这样,每次调用生成函数时得到的伪随机数列都不同,得到的“随机”数也就具有一定的随机性了。

那请问可不可以举一段用系统时间作种子的例子啊
系统时间能转为一个整型的值 吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表