java Random类

Random类  java.util.Random

Random类可以生成随机数,伪随机是因为它产生的随机数是通过算法产生的

两个构造方法

Random()创建一个随机数生成器对象,无参

public Random(long seed) 使用单个 long 种子创建一个新的随机数生成器,,使用带seed的构造方法,如果seed一样,那么只要调用next的次数相同,产生的值就是相同的

常用方法

nextInt() 随机返回一个int型整数

nextInt(int bound),随机返回一个值在[0,bound)的int类型的整数,包括0不包括bound

nextFloat()随机返回一个值在[0,1)之间的float类型的数据

nextDouble()随机返回一个在[0,1)之间的double类型的数据


import java.util.Random;

public class RandomTest {
	public static void main(String[] args) {
		Random r1 = new Random();
		// 随机生成一个int型整数
		System.out.println(r1.nextInt());
		for (int i = 0; i < 5; i++) {
			// 随机生成一个[0,4)的整数
			System.out.println(r1.nextInt(4));
			//随机生成一个[0,1)的float数
			System.out.println(r1.nextFloat());
			//随机生成一个[0,1)的double数
			System.out.println(r1.nextDouble());
		}
	}
}

例子

模拟双色球生成

1

/**
 * 完成一个彩票机选号码生成器,这里以双色球为例,
 * 双色球每注中奖号码由6个不同的红色球号码和1个蓝色球号码组成。
 * 红色球号码从1~33中选择;蓝色球号码从1~16中选择。
 * @author fuyu
 *
 */

import java.util.Arrays;
import java.util.Random;

public class RandomTest01 {
	public static void main(String[] args) {
		int[] a = color2Balls();
		for (int i : a) {
			System.out.print(i + ",");
		}
	}

	public static int[] color2Balls() {
		int[] arr = new int[7];
		Random r = new Random();
		int i = 0;// 定义指针
		while (true) {
			// 生成红球数字,加1是因为Random类的nextInt(int bound)方法生成[0,bound)之间的数
			int red = r.nextInt(33) + 1;
			// 判断红球是否在数组中出现过,
			boolean Isin = inArrays(arr, red);
			// 如果红球没在数组中出现过
			if (!Isin) {
				// 将红球的数字传入数组,指针往后移
				arr[i] = red;
				i++;
			}
			if (i == 6) {
				// 如果i==6,说明数组中的前6个元素已经选择完毕,对前六个元素排序
				Arrays.sort(arr, 0, 6);
				// 生成篮球
				arr[i] = r.nextInt(16) + 1;
				// 跳出循环
				break;
			}
		}

		return arr;
	}

	public static boolean inArrays(int[] arr, int i) {
		// 判断某个元素是否在数组中,在,返回true,不在,返回false
		for (int j : arr) {
			if (j == i) {
				return true;
			}
		}
		return false;
	}
}

2


import java.util.Arrays;
import java.util.Random;

/*
 * 
 * 完成一个彩票机选号码生成器,这里以双色球为例
 * ,双色球每注中奖号码由6个不同的红色球号码和1个蓝色球号码组成。
 * 红色球号码从1~33中选择;蓝色球号码从1~16中选择。
 */
public class RandomTest02 {
	public static void main(String[] args) {
		color2Balls();
	}

	public static void color2Balls() {
		//创建一个长33的号码数组,存放从1-33的整数
		int[] balls = new int[33];
		for (int i = 0; i < balls.length; i++) {
			balls[i] = i + 1;
		}
		// 创建数组来标记红球是否重复
		boolean[] isUsed = new boolean[33];
		//定义result长为6的结果数组来保存红球结果
		int results[] = new int[6];
		//定义指针,即数组下标
		int i = 0;
		Random random = new Random();
		while (true) {
			//生成从0到32的随机数
			int red = random.nextInt(33);
			//如果这个随机数之出现过
			if (isUsed[red] == true) {
				//重新执行while循环
				continue;
			}
			//如果这个随机数没出现过,将随机数作为号码数组下标,从号码数组中取出这个球放入到结果数组
			results[i] = balls[red];
			//结果数组的下标往后移动
			i++;
			//如果结果数组的下标为6说明结果数组已经选取完毕,退出循环
			if (i == 6) {
				break;
			}
			//将标记数组的随机数位置上的值置true,标记这个号码已经选取过了
			isUsed[red] = true;

		}
		//对结果数组排序,得到红球结果
		Arrays.sort(results);
		//随机生成下标数字,从号码数组中取出该号码,即是蓝球结果
		int blue = random.nextInt(16);
		System.out.println("红球");
		for (int j : results) {
			System.out.print(j + ",");
		}
		System.out.println();
		System.out.println("蓝球");
		System.out.println(balls[blue]);
	}
}

参考:http://www.monkey1024.com/javase/517

猜你喜欢

转载自blog.csdn.net/sinat_41132860/article/details/84034148