关于java中的Random()函数

在java中,有两种Random函数,一种是在java.lang.Math.Random包下的,另一种是在java.util.Random包下的.

首先讲一下java.lang.Math.Random

调用这个函数会产生[0,1.0)区间double类型的正浮点数,具体使用例子如下: 

import java.util.Random;

public class TestDemo {

	public static void main(String[] args) {
		
//      定义一个double类型的变量来接收Math.random()函数产生的[0,1.0)区间的随机数
		double b1 = Math.random();
//		生成一个[0,10.0)区间的随机数:
		double b2 = Math.random() * 10;
//		生成一个[2.5,5)区间的随机数:
		double b3 = Math.random() * 5 + 2.5;
        System.out.println("[0,1.0)区间的随机数"+b1+"\n[0,10.0)区间的随机数"
                            +b2+"\n[2.5,5)区间的随机数"+b3);
//      打印结果:
//        [0,1.0)区间的随机数0.33543326059375644
//        [0,10.0)区间的随机数3.244582787241442
//        [2.5,5)区间的随机数1.077578154445983
		

}

再讲一下java.util.Random

在Random()中,Random()的参数值指的是种子(种子,用于随机数生成的初始化值,随机数生成器对于特定的种子产生相同的随机数序列),根据种子可以创建一个新的随机数生成器,对于无参的Random(),默认当前系统时间的毫秒数作为种子,对于种子(即参数)相同的Random对象,生成的随机数序列是一样的。Random()函数也可以生成不同类型的随机数,只需要调用不同类型的方法,比如nextInt(),nextDouble()等,传递给方法参数,就可以设置产生随机数的范围,要注意的是,调用浮点类型的方法时,是不能加参数的.

补充一点

Random()函数生成的随机数本质上是伪随机数,伪随机数就是根据种子的值,用确定性的算法计算出来一串数,若函数的参数(种子)不变,那么产生的随机数的结果也不会变,简单说,Random(50).nextInt(10)产生随机数的结果是不会变的,只要Random()的参数不变,则产生的[0,10)范围内的随机数结果就不会改变

下面是实例:

例一,无参的Random:

import java.util.Random;

public class TestDemo {

	public static void main(String[] args) {

         Random ran = new Random();
		 for(int i = 0;i<5;i++){
			int a = ran.nextInt(20);
			double b = ran.nextDouble();
			System.out.print("int类型的的值"+a);
			System.out.print("  double类型的的值"+b);
          }		

}


这里要说一下,nextInt()里的参数,规定了随机数的范围,参数为50确定的范围是[0,50),是取不到50的.若是无参,对于int类型,随机数取值范围是int数据类型的取值范围,对于double类型,取值范围是[0,1).

例二,有参的Random

import java.util.Random;

public class TestDemo {

	public static void main(String[] args) {

        Random ran1 = new Random(100);
		Random ran2 = new Random(100);
		for(int i = 0;i<5;i++){
			int a = ran1.nextInt(50);
			int b = ran2.nextInt(50);
			System.out.print("ran1的值"+a);
			System.out.print("\tran2的值"+b);
            System.out.println();
//运行结果
//    ran1的值15	ran2的值15
//    ran1的值0	     ran2的值0
//    ran1的值24	ran2的值24
//    ran1的值38	ran2的值38
//    ran1的值41	ran2的值41
			
		}
}       



由结果可以看出,当Random()函数的参数相同时,产生的随机数也是相同的

再说一下,如何生成不重复的随机数

import java.util.Random;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;

public class TestDemo {

	public static void main(String[] args) {

        Set<Integer> set=new HashSet<Integer> ();
		Random nran = new Random();
		while(set.size()<10){
			set.add(nran.nextInt(50));
		}
		
		for( Iterator it = set.iterator();it.hasNext();)  
		{               
		    System.out.println("value="+it.next().toString());              
		} 
			
		}
}       


  

使用Set<T>接口,来接收Random()函数产生的随机数,因为Set<T> 集合不允许重复的值,所以可以确保存入的随机数是不重复的,最后使用迭代器读取Set里的值.

 

猜你喜欢

转载自blog.csdn.net/znmdwzy/article/details/81252209