我们通常使用Random类来生成随机数,这个类的每个对象是一个随机数发生器,任何Random对象可以生成int,long,floa或者double类型的伪随机数。

生成的整数值被均匀地分布在整数类型的范围内,它生成的浮点数值被限定在两种类型中      (0.0-1.0)的范围内。也可以用一个高斯(均匀)分布生成double类型的数,该分部的均值为0,0,标准偏差为1,0。这是一个典型的钟形曲线代表许多随机事件分布的可能性。

一, 随机数的构造器

Random对象有两个构造函数。默认的构造函数从你的计算机时钟取得的当前时间作种子值生成伪随机数创建一个对象。另一个构造函数接受一个long类型的自变量作种子

      Random r=new Random();//创建一个新的随机生成器

     Random repeatable =new Random(123d);//使用单个long种子创建一个新的随机数生成器。

如果使用默认的构造函数,同一个程序每次运行生成的随机数序列都会不同,要提防在同一个构造函数中创建2个生成器。解决问题花费的时间是一毫秒,因此如果在前边的语句中建立了两个对象,通常这两个对象会生成相同的序列,因为使用开始的种子值的次数是相同的。用同一种子创建的Random对象总产生相同的序列,当你测试程序时对这一点非常重要测试一个输出不重复的程序是一个挑战java中用一个给定的种子建立的随机数生成器的一个主要特点是从一个给定的种子不仅总产生同一个伪随机数序列,而且在不同计算机上也是这样。

二, 随机数的操作

一个Random对象提供的公共方法有很多,它的全部方法以及方法的说明如下。

Random类的方法摘要

  1. protected int     描述:next(int bits)生成下一个伪随机数
  2. boolean            描述:nextBoolean()返回下一个伪随机数,它是取自此随机数生成器序列的                                     均匀分布的boolean值
  3. void                  描述:nextBytes(byte[]bytes)生成随机字节并将其置于用户提供的byte数组中
  4. double              描述:nextDouble()返回下一个伪随机数,它是取自此随机数生成器序列                                     的,在0.0和1.0之间均匀分布的double值
  5. float                  描述:nextFloat()返回下一个伪随机数,它是取自此随机数生成器序列                                          的,在0.0和1.0之间均匀分布的floa值
  6. double              描述:nextGaussian()返回下一个伪随机数,它是取自此随机数生成器序                                      列的,呈高斯(“正态“)分布的double值,其平均值是0.0,标准差是                                     1.0
  7. int                     描述:nextInt()返回下一个伪随机数,它是此随机数生成器的序列中均匀                                     分布的int值
  8. int                     描述:nextInt(int n)返回一个伪随机数,它是此随机数生成器序列的,在0                                    (包括)和指定值(不包括)之间均匀分布的int值
  9. long                  描述:nextLong()返回下一个伪随机数,它是取自此随机数生成器序列的                                     均匀分布的long值
  10. void                  描述:setSeed(long seed)使用单个long种子设置此随机数生成器的种子

为了产生特定类型的伪随机数,你只需调用Random对象相应的方法:通过用同一个种子值作自变量调用setSeed() 方法,你可以重复得到你用种子值创建的Random对象生成的随机数序列。

Test测试

通过模拟投掷一对骰子来完成一个简单程序,假设投掷六次骰子,一对骰子都为6则赢反之则输。

 

 

源代码: Random random=new Random();
         String[] Throw= {"第一次","第二次","第三次",
                 "第四次","第五次","第六次"};
         int dice1=0;//存放第一个骰子的值
         int dice2=0;//存放第二个骰子的值
         for(int i=0;i<6;i++) {
             dice1=1+Math.abs(random.nextInt())%6;//1-6
             dice2=1+Math.abs(random.nextInt())%6;//1-6
             System.out.println(Throw[i]+"投掷骰子:"+dice1+","+dice2);
             if(dice1+dice2==12) {//如果两个都是六
                 System.out.println("赢了!0.0");
                 return;
             }
         }
         System.out.println("对不起,你输了-.-");
    }

 在for循环中我们模拟投掷骰子,每次投掷我们需要一个1-6之间的随机数。生成这种随机数最简单的方法是用6除random对象生成的随机整数,然后加1,记住从nextInt()方法得到的伪随机数值被均匀分布在int类型所有可能值的取值范围内,正负均可。这就是为什么需要用Math类的abs()方法确保得到一个骰子的正值。//Math.abs()方法可返回数的绝对值。

更多推荐

随机数操作