黑马程序员技术交流社区

标题: 我不明白这个代码是什么意思 [打印本页]

作者: 崔节帅    时间: 2015-11-27 15:57
标题: 我不明白这个代码是什么意思
//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


作者: Myth、骞    时间: 2015-11-27 16:12
Random rand = new Random(47); 47 是种子数,这里指明了,所以下面代码随机生成就固定了
作者: 崔节帅    时间: 2015-11-27 18:57
Myth、骞 发表于 2015-11-27 16:12
Random rand = new Random(47); 47 是种子数,这里指明了,所以下面代码随机生成就固定了 ...

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

输出的结果可以给解释一下吗?
作者: wangyoucao    时间: 2015-11-27 21:48
如果,还想深入挖掘,后面实现的算法和原理,那就只有去看java的源代码了。。。
作者: hansnowqiang    时间: 2015-11-27 22:24
本帖最后由 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的随机数,没什么好解释的。

作者: 成帅帅    时间: 2015-11-27 23:05
我还在基础班,我就看看大神们的回复。好憧憬,希望自己以后更强
作者: 1018chenhaiyang    时间: 2015-11-28 10:33
里面加拉数生成的数就是固定的了
作者: 队长别开枪是我    时间: 2015-11-28 22:09
都是大神啊...我只能默默地顶个帖子{:2_44:}
作者: jiangshicun007    时间: 2015-11-29 10:06
这么说吧!java里的随机数都是伪随机数,它是通过一套算法来实现的,而算这个随机数需要一个参数,也就是种子数,一般很多随机数默认种子数为当前时间,但我们也可以自己定义种子,你这个题中的47就是人家自己定义的种子,有了固定种子算出的随机数,你多运行几次是会有重复的出现,因为他的种子是固定的,也就是说,一个固定的种子能得到的数是固定的!楼主明白了吧!
作者: 雨来    时间: 2015-12-3 21:03
wangyoucao 发表于 2015-11-27 21:36
首先,你开头的静态导入,该是import static XXX。Random rand = new random(47)是Random的有参构造方法, ...

jie shi jiu ying gai shi zhe yang de
作者: ^_^笨和尚^_^    时间: 2015-12-3 23:59
还没学到呢////
作者: cai602098596    时间: 2015-12-8 22:08
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的就懂了吧
作者: 周亚飞    时间: 2015-12-14 10:57
有参构造Random(long seed),参数seed(种子)固定,重新运行一遍程序你会看到产生的随机数和第一次运行是一样的.无参构造源码中是用纳秒值做种子,纳秒值是变化的.所以每次运行程序产生的随机数都不一样
作者: zuozuozou    时间: 2015-12-20 00:22
看不懂...
作者: cj286    时间: 2015-12-25 11:31
  Random rand = new random(47);//这句话是什么意思呢?
你传入的47是产生随机数的种子,如果没有参数的话,就是获取系统时间来作为种子




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2