关于java中的Random()函数

关于java中的Random()函数在java中,有两种Random函数,一种是在java.lang.Math.Random包下的,另一种是在java.util.Random包下的.首先讲一下java.lang.Math.Random调用这个函数会产生[0,1.0)区间double类型的正浮点数,具体使用例子如下:importjava.util.Random;publicclassTestDemo{ …

关于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() * 2.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()函数的参数相同时,产生的随机数也是相同的

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

方法一:

public class Time0812 {

	public static void main(String[] args) {
		Random random = new Random();
		int[] arr = new int [5];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = random.nextInt(6);
			for (int j =  0; j < i; j++) {
				if(arr[j]==arr[i]){
					i--;
//i--操作,改变了i的值,结束了第二层的for循环,进入第一层循环,重新产生一个随机数,进行循环判断
				}
			}
		}
		System.out.println(Arrays.toString(arr));
	}
}

方法二: 

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里的值.

 

今天的文章关于java中的Random()函数分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/28615.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注