黑马程序员技术交流社区

标题: 随机数问题? [打印本页]

作者: chjxs    时间: 2012-10-3 16:02
标题: 随机数问题?
本帖最后由 chjxs 于 2012-10-3 16:03 编辑

Java随机数问题。产生随机数
1,方法Math.random();
2,随机数Random类

有什么区别?

作者: 曾浩    时间: 2012-10-3 16:15
Math.random(); 是随机产生一个0~1之间的一个数
而 Random是一个类 这个里面已经封装了很多的方法
例如:public int nextInt()
         该方法的作用是生成一个随机的int值,该值介于int的区间,也就是-2的31次方到2的31次方-1之间。
       public int nextInt(int n)
             该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。



作者: 黄小贝    时间: 2012-10-3 16:18
这类问题,自己看JDK源码就知道了~先看

Math.random
  1. public static double random() {
  2.         if (randomNumberGenerator == null) initRNG();
  3.         return randomNumberGenerator.nextDouble();
  4.     }
复制代码
跟进initRNG()方法~
  1. private static synchronized void initRNG() {
  2.         if (randomNumberGenerator == null)
  3.             randomNumberGenerator = new Random();
  4.     }
复制代码
懂了吧?

Math类里面new了一个Random~~代码的复用~~




作者: chjxs    时间: 2012-10-3 16:19
曾浩 发表于 2012-10-3 16:15
Math.random(); 是随机产生一个0~1之间的一个数
而 Random是一个类 这个里面已经封装了很多的方法
例如:pu ...

如果我要产生5-15之间的随机数该怎么弄呢?
作者: 曾浩    时间: 2012-10-3 16:32
chjxs 发表于 2012-10-3 16:19
如果我要产生5-15之间的随机数该怎么弄呢?

兄弟这种问题 要理解random类中的方法
public int nextInt(int n)
             该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。


nextInt(10)+5   不就可以了吗
作者: 佘天宇    时间: 2012-10-3 16:59
  1. package cn.itcast.heima.technology;

  2. import java.util.Random;

  3. public class RandomTest {

  4.        
  5.         public static void main(String[] args) {
  6.         /*(1)Random:这是一个类,里面有方法:
  7.          *  int nextInt()随机生成一个数,数在int所能表示的范围内
  8.          *
  9.          *  int nextInt(int n):生成一个随机数,
  10.          *  在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
  11.          *
  12.          * (2)random():方法是操作基本数学运算工具类Math中的方法
  13.          * Math类中的方法都是静态,
  14.          * random()方法生成的是一个处于0.0~1.0之间的double类型的数
  15.          * 包含0.0,但是不包含1.0(符合java中的包含头,不包含尾)
  16.         */
  17.                
  18.                
  19.                 //生成5-15之间的数,运行没出现所有的数可以增加循环的次数或者多运行几次
  20.                 for(int n=0;n<30;n++){
  21.                        
  22.                         int num=new Random().nextInt(11)+5;
  23.                         //这里Random().nextInt(11)生成的数是0~10,后面加上5,自然是5~15了
  24.                         //这里就不是很适宜使用Math.random()方法
  25.                        
  26.                        
  27.                         System.out.println(num);
  28.                 }
  29.         }

  30. }
复制代码

作者: 王海宇    时间: 2012-10-3 18:34
本帖最后由 王海宇 于 2012-10-3 18:47 编辑
chjxs 发表于 2012-10-3 16:19
如果我要产生5-15之间的随机数该怎么弄呢?

先产生0到10之间的数,然后这个数再加上5就可以了。
因为只能产生0到多少之间的数,所以如果需要某个区间的数,就先把这个区间的数
转成0到某个数,(就是左边的值变成0,右边的值变成“右边原来的值减去左边原来的值”)。
这样一来,就可以利用Random对象的特性生成0到某个数了,然后再加上左边原来的值就可以了
作者: 王海宇    时间: 2012-10-3 18:48
用代码来说明一下获取两个int类型之间的数
  1. //产生一个位于left和right之间的int型的随机数,包括left和right
  2.         public int nextInt(int left,int right) {
  3.                 if(left >= right)
  4.                         throw new RuntimeException("错误的参数");
  5.                 return new Random().nextInt(right - left + 1) + left;
  6.         }
复制代码





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