A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ehuashao 中级黑马   /  2014-3-30 17:01  /  4317 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ehuashao 于 2014-3-30 21:17 编辑

在java中都是用Math.random方法或Random类来产生随机数的。
  1. public static void main(String[] args) {
  2.                 Random ran = new Random();
  3.                 for(int i=1;i<4;i++){
  4.                         System.out.println("第"+i+"次:"+ran.nextInt());
  5.                 }
  6.         }
复制代码

每次产生的随机数都是不一样的没什么问题,但当我们用Random类的有参构造函数来初始化的时候,就有问题了,代码如下:
  1. public static void main(String[] args) {
  2.                 Random ran = new Random(1000);
  3.                 for(int i=1;i<4;i++){
  4.                         System.out.println("第"+i+"次:"+ran.nextInt());
  5.                 }
  6.         }
复制代码

无论运行多少次每次得到的三个随机数都是一样的,没有改变。为什么用了有参的构造函数会有这样的问题啊。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
看了下,Random(1000); 括号里只要输入一个数字,就代表产生了一个有固定顺序的随机码
除非你调用setSeed(long seed)方法改变值,才可以改变成另一个有固定顺序的随机码

不定义,Random()括号内的内容,就相当于,long seed 这个seed值是随机的,所以才会随机

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
种子一样,当然获取的随机值也一样了
回复 使用道具 举报
public static void main(String[] args) {
                Random ran = new Random();
                for(int i=1;i<4;i++){
                        System.out.println("第"+i+"次:"+ran.nextInt(1000));
                }
你的1000写错地方了吧。
回复 使用道具 举报
一诺千金 发表于 2014-3-30 20:50
public static void main(String[] args) {
                Random ran = new Random();
                 ...

我用的是random的有参构造函数,没错。问题上面已经解答了。不过还是谢了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马