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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔节帅 中级黑马   /  2015-11-27 15:57  /  4327 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1黑马币
//operators/Bool.java
//Relational and logical operators.
import java.util.*;
import ststic net.mindview.util.Print.*;


public class Bool{
   public static void main(String[]args){
     Random rand = new random(47);//这句话是什么意思呢?
     int i = rand.nextInt(100);
     int j = rand.nextInt(100);
     print("i =" +i);
     print("j =" +j);


    /*output:
i=58//输出的结果为什么是这个呢?
j=55

18 个回复

倒序浏览
Random rand = new Random(47); 47 是种子数,这里指明了,所以下面代码随机生成就固定了
回复 使用道具 举报
Myth、骞 发表于 2015-11-27 16:12
Random rand = new Random(47); 47 是种子数,这里指明了,所以下面代码随机生成就固定了 ...

还是不明白。你学到哪里啦亲?
回复 使用道具 举报
我觉得你可以试试不加47.看看结果是什么,对比应该会比较好理解一些
回复 使用道具 举报
首先,你开头的静态导入,该是import static XXX。Random rand = new random(47)是Random的有参构造方法,即指定随机数生成器的种子为47,相当于如下代码: Random rand=new random();   rand.setSeed(47);其实这个随机数生成器,是个伪随机数,并不是真正的随机数生成器,其内部还是按照一定算法来实现的。设置种子,即设置的是伪随机数生成器的内部状态的初始值。因为初始值固定为47,其内部的算法是固定的,故出来的值也是固定的。若用带无参的构造函数出来的随机数就是变化的。

点评

厉害!  发表于 2015-12-7 00:35
回复 使用道具 举报
wangyoucao 发表于 2015-11-27 21:36
首先,你开头的静态导入,该是import static XXX。Random rand = new random(47)是Random的有参构造方法, ...

输出的结果可以给解释一下吗?
回复 使用道具 举报
如果,还想深入挖掘,后面实现的算法和原理,那就只有去看java的源代码了。。。
回复 使用道具 举报
本帖最后由 hansnowqiang 于 2015-11-27 22:36 编辑

Random rand = new random(47)
这是一个构造方法;这个类可以产生随机数,如果不加47,即括号里面为空的情况下:其实系统默认填入括号中的是当前时间的毫秒值(这个毫秒值是以1970年1月1日 0时0分0秒0毫秒(好像是这个日子,不是别喷我,就是帮助理解毫秒值怎么来的)到程序运行的系统时间之差)通过这个毫秒值再加上这个类的底层算法,就产生了随机数。你每次运行此方法毫秒值肯定是不同的。这样每次产生的随机数也就不同。这个毫秒值就是一个计算随机数的种子。但当你将47填入括号时,种子就固定了,你再每次运行产生的随机数也就固定了。那个100指的是产生0--100以内的随机数。包括0不包括100。
你可以定义一个数组用上面的方法
在Random rand = new random()时生成10个随机数,然后遍历输出
在Random rand = new random(47)时生成10个随机数,在遍历输出
多次运行试试,你会发现上面的不填值得每次都变,下面填了47的每次运行都一样。
至于你强调的解释结果:那是两个0-99的随机数,没什么好解释的。
回复 使用道具 举报
我还在基础班,我就看看大神们的回复。好憧憬,希望自己以后更强
回复 使用道具 举报
里面加拉数生成的数就是固定的了
回复 使用道具 举报
都是大神啊...我只能默默地顶个帖子{:2_44:}
回复 使用道具 举报
这么说吧!java里的随机数都是伪随机数,它是通过一套算法来实现的,而算这个随机数需要一个参数,也就是种子数,一般很多随机数默认种子数为当前时间,但我们也可以自己定义种子,你这个题中的47就是人家自己定义的种子,有了固定种子算出的随机数,你多运行几次是会有重复的出现,因为他的种子是固定的,也就是说,一个固定的种子能得到的数是固定的!楼主明白了吧!
回复 使用道具 举报
wangyoucao 发表于 2015-11-27 21:36
首先,你开头的静态导入,该是import static XXX。Random rand = new random(47)是Random的有参构造方法, ...

jie shi jiu ying gai shi zhe yang de
回复 使用道具 举报
还没学到呢////
回复 使用道具 举报
Random rand = new random(47);
    int i = rand.nextInt(100);//在这你从47到100开始产生随机数  
     int j = rand.nextInt(100);
     print("i =" +i);
     print("j =" +j);
为什么i是58  j是55的就懂了吧
回复 使用道具 举报
有参构造Random(long seed),参数seed(种子)固定,重新运行一遍程序你会看到产生的随机数和第一次运行是一样的.无参构造源码中是用纳秒值做种子,纳秒值是变化的.所以每次运行程序产生的随机数都不一样
回复 使用道具 举报
看不懂...
回复 使用道具 举报
cj286 中级黑马 2015-12-25 11:31:05
18#
  Random rand = new random(47);//这句话是什么意思呢?
你传入的47是产生随机数的种子,如果没有参数的话,就是获取系统时间来作为种子
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马