JAVA 随机数生成方式

JAVA中生成随机数方法

(1)使用Math.random()。Math.random()随机地选取一个0~1之间的double类型小数,如果将其乘以一个数,比如100,就得到0~100之间的随机数值:

int randomNumber = (int) Math.round(Math.random()*(max-min)+min); 

(2)利用System类的currentTimeMillis()方法,这个方法返回从1970年1月1号0点0分0秒到当前的一个long型的毫秒 数,可作为一个随机数,还可以将其对某些数取模,就能限制随机数的范围;此方式在循环中同时产生多个随机数时,会是相同的值,有一定的局限性!

  long randomNum = System.currentTimeMillis();  
 int randomNumber = (int) randomNum%(max-min)+min; 

(3)Random类

   Random类中实现的随机算法时伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。(种子数只是随机算法的起源数字,和生成的随机数字的区间无关)

Random类包含两个构造方法:

1) public Random()

该构造方法使用和当前系统时间有关的数字作为种子数,然后使用这个种子数构造Random对象。实际上Math.Random()内部也是利用这个构造方法来创建随机数(细节可查看源码)。

Random r=new Random()

2)public Random(long seed)

使用指定的种子数seed创建Random对象,如果种子数相同,生成的随机数也会相同。

Random r=new Random(1000)

主要方法:

public boolean nextBoolean()

生成一个随机的boolean值,生成true和false的几率相等。

public double nextDouble()

生成一个随机的double值,数值介于[0,1]之间。

public int nextInt()

生成一个随机的int值,该值介于int类型整数范围之内。

public int nextInt(int n)

生成一个随机的int值,该值介于[0,n)之间。

public void setSeed(long seed)

重新设置Random对象中的种子数。设置完种子数以后的random对象和相同种子数的使用new关键字创建出的Random对象相同。

生成指定范围内的随机数方法:

 //1.直接两重循环去重
    public static int [] randomCommon(int min,int max,int n){
          if(n>(max-min+1)||max<min){
                return null;
          }
          int [] result=new int[n];
          int count=0;
          while(count<n){
                 int num=  (int) (Math.random()*(max-min) +min);
              boolean flag=true;
               for(int j=0;j<n;j++){
                    if(num==result[j]){
                          flag=false;
                          break;
                    }
               }
               if(flag){
                    result[count]=num;
                    count++;
               } 
          }
          
        return result;
    }   

 
     //2.排除已经随机的数
      public static  int [] randomArray(int min,int max,int n){
           int len=max-min+1;
           if(max<min || n>len){
                return null;
           }
           //初始化给定范围的待选数组
           int [] seq=new int[len];
           for(int i=min;i<min+len;i++){//初始时seq数组存储 min~max的所有数
                seq[i-min]=i;     //i: len-1
           }
           
          int [] result=new int[n];
          Random rand=new Random();
             
          for(int i=0;i<result.length;i++){
            int  index=rand.nextInt(len); //生成随机下标,范围是0~len
               result[i]=seq[index];      
               seq[index]=seq[len-1];  
               len--;
          }
          return result;
      }

 

 

 

猜你喜欢

转载自blog.csdn.net/u013779129/article/details/81229328