java获取随机数

来源:互联网 发布:毛姆 知乎 编辑:程序博客网 时间:2024/06/16 15:44


在Java中我们可以使用java.util.Random类来产生一个随机数发生器。它有两种形式的构造函数,分别是Random()和Random(long seed)。Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,Random(long seed)使用指定的seed作为发生器的种子。

         随机数发生器(Random)对象产生以后,通过调用不同的method:nextInt()、nextLong()、nextFloat()、nextDouble()等获得不同类型随机数。

        1>生成随机数
            Random random = new Random();
            Random random = new Random(100);//指定种子数100
            random调用不同的方法,获得随机数。
            如果2个Random对象使用相同的种子(比如都是100),并且以相同的顺序调用相同的函数,那它们返回值完全相同。如下面代码中两个Random对象的输出完全相同
        

   import java.util.*;           class TestRandom {                 public static void main(String[] args) {                      Random random1 = new Random(100);                      System.out.println(random1.nextInt());                      System.out.println(random1.nextFloat());                      System.out.println(random1.nextBoolean());                      Random random2 = new Random(100);                      System.out.println(random2.nextInt());                      System.out.println(random2.nextFloat());                      System.out.println(random2.nextBoolean());                 }             }

         2>指定范围内的随机数
              随机数控制在某个范围内,使用模数运算符%
          

   import java.util.*;                  class TestRandom {                       public static void main(String[] args) {                            Random random = new Random();                            for(int i = 0; i < 10;i++) {                                System.out.println(Math.abs(random.nextInt())%10);                            }                       }                  }


              获得的随机数有正有负的,用Math.abs使获取数据范围为非负数

        3>获取指定范围内的不重复随机数
            

 import java.util.*;             class TestRandom {                   public static void main(String[] args) {                        int[] intRet = new int[6];                         int intRd = 0; //存放随机数                        int count = 0; //记录生成的随机数个数                        int flag = 0; //是否已经生成过标志                        while(count<6){                             Random rdm = new Random(System.currentTimeMillis());                             intRd = Math.abs(rdm.nextInt())%32+1;                             for(int i=0;i<count;i++){                                 if(intRet[i]==intRd){                                     flag = 1;                                     break;                                 }else{                                     flag = 0;                                 }                             }                             if(flag==0){                                 intRet[count] = intRd;                                 count++;                             }                    }                   for(int t=0;t<6;t++){                       System.out.println(t+"->"+intRet[t]);                   }                }             }


原文链接:

http://blog.csdn.net/herrapfel/article/details/1885016


0 0