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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chjxs 中级黑马   /  2012-10-3 16:02  /  1956 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 chjxs 于 2012-10-3 16:03 编辑

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

有什么区别?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 新人提问 多多支持

查看全部评分

8 个回复

倒序浏览
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。


评分

参与人数 1技术分 +1 收起 理由
王海宇 + 1

查看全部评分

回复 使用道具 举报
这类问题,自己看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~~代码的复用~~



评分

参与人数 1技术分 +1 收起 理由
王海宇 + 1

查看全部评分

回复 使用道具 举报
曾浩 发表于 2012-10-3 16:15
Math.random(); 是随机产生一个0~1之间的一个数
而 Random是一个类 这个里面已经封装了很多的方法
例如:pu ...

如果我要产生5-15之间的随机数该怎么弄呢?
回复 使用道具 举报
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   不就可以了吗
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
王海宇 + 1

查看全部评分

回复 使用道具 举报
王海宇 黑马帝 2012-10-3 18:34:10
7#
本帖最后由 王海宇 于 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:15
8#
用代码来说明一下获取两个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.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马