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]);
}
}