JAVA中的Random()函数

Java中存在着两种Random函数:

一、java.lang.Math.Random;

  调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。例子如下:

package test7;
/**
 * Math.random 返回的结果是一个double类型 
 */
public class TestDoWhile {
	public static void main(String[] args) {
		int i = 0;
		while(i<=1) {
			double random = Math.random();//生成一个0.00到1.00之间的小数
			System.out.println(random);
			i++;
		}
	}
}
//	输出结果:0.2712203924820884
//		   0.956275463293749

二、java.util.Random

  下面Random()的两种构造方法:

     Random():创建一个新的随机数生成器。

     Random(long seed):使用单个 long 种子创建一个新的随机数生成器。

package test7;
import java.util.Random;
/***
 * //种子数相同的情况下,生成的随机数相同,即使输出的个数不同
 * 
 * //没有种子,那么每次刷新生成的随机数都不相同
 * @author 184527
 *
 */
public class TestDoWhile {
	public static void main(String[] args) {
		Random ran1 = new Random(10);//种子数为10
        System.out.println("使用种子1为10的Random对象生成[0,10)内随机整数序列: ");
        for (int i = 0; i < 5; i++) {
            System.out.print(ran1.nextInt(10) + " ");//nextInt(10)在此表示生成的随机数【小于10】
        }
//      使用种子1为10的Random对象生成[0,10)内随机整数序列: 
//      3 0 3 0 6 
        System.out.println("");
//==================================================================
        
        
        
        Random ran2 = new Random(10);//种子数为10
        System.out.println("使用种子2为10的Random对象生成[0,10)内随机整数序列:  ");
        for (int i = 0; i < 10; i++) {
            System.out.print(ran2.nextInt(10) + " ");//nextInt(10)在此表示生成的随机数【小于10】
        }
//      使用种子2为10的Random对象生成[0,10)内随机整数序列:  
//      3 0 3 0 6 6 7 8 1 4 
        System.out.println("");
//==================================================================
        
        
        
//      无种子数,所以每次刷新生成的随机数都不尽相同
        Random ran3 = new Random();//种子数为10
        System.out.println("Random对象生成[0,10)内随机整数序列:  ");
        for (int i = 0; i < 10; i++) {
            System.out.print(ran2.nextInt(10) + " ");//nextInt(10)在此表示生成的随机数【小于10】
        }
//      Random对象生成[0,10)内随机整数序列:  
//      3 9 1 8 5 0 6 3 3 8 
	}
}

直接使用Random无法避免生成重复的数字,如果需要生成不重复的随机数序列,需要借助数组和集合类

package test7;

import java.util.ArrayList;
import java.util.Random;

public class TestDoWhile {

	public static void main(String[] args) {

		// 另外,直接使用Random无法避免生成重复的数字,如果需要生成不重复的随机数序列,需要借助数组和集合类
		ArrayList list = new TestDoWhile().getDiffNO(10);
		System.out.println();
		System.out.println("产生的n个不同的随机数:" + list);
	}

	/**
	 * 生成n个不同的随机数,且随机数区间为[0,10)
	 * 
	 * @param n
	 * @return
	 */
	public ArrayList getDiffNO(int n) {
		// 生成 [0-n) 个不重复的随机数
		// list 用来保存这些随机数
		ArrayList list = new ArrayList();
		Random rand = new Random();
		boolean[] bool = new boolean[n];
		int num = 0;
		for (int i = 0; i < n; i++) {
			do {
				// 如果产生的数相同继续循环
				num = rand.nextInt(n);
			} while (bool[num]);
			bool[num] = true;
			list.add(num);
		}
		return list;
	}

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值