相关文章:
- 《常用类 (一) ----- Arrays数组工具类》
- 《常用类 (二) ----- Math类》
- 《常用类 (三) ----- BigDecimal和BigInteger大数类》
- 《常用类 (四) ----- Random随机数类》
- 《常用类 (五) ----- Date日期类和Calender日历类》
- 《常用类 (六) ----- String类与字符串》
- 《常用类 (七) ----- 包装类》
随机数类Random
一、构造方法
Random()
Random(int seed)
——相同seed的Random对象每次产生的随机数相同
二、常用方法
返回值 | 函数名和形参 | 功能 |
---|---|---|
int | nextInt() | 随机生成一个int范围内的整型值 |
int | nextInt(int bound) | 随机生成一个[0,bound)范围内的整型值 |
long | nextLong() | 随机生成一个long范围内的长整型值 |
float | nextFloat() | 随机生成一个[0,1)范围内的单精度浮点数 |
double | nextDouble() | 随机生成一个[0,1)范围内的双精度浮点数 |
boolean | nextBoolean() | 随机生成一个布尔值 |
void | nextBytes(byte[] bytes) | 随机生成字节填充到指定字节数组中 |
void | setSeed(int seed) | 给Random对象设置种子 |
三、练习:生成一个长度为n,指定元素范围的随机数组
public static int[] getRandomArray(int length, int from, int to) {
// 先构造一个元素全为0的数组
int[] arr = new int[length];
// 辅助数组
int[] helper = new int[length];
System.arraycopy(arr, 0, helper, 0, length);
// 数组初始化为-1
Arrays.fill(arr, -1);
Arrays.fill(helper, -1);
// 随机数
Random random = new Random();
// 遍历数组
for (int i = 0; i < length; i++) {
// 死循环生成随机数
while (true) {
int num = getRandomNum(from, to, random);
// 二分查找该数字是否存在于这个数组中
// 如果不在则把该数字放在数组内然后跳出死循环
if (!isContains(helper, num)) {
arr[i] = num;
helper[i] = num;
break;
}
}
}
return arr;
}
private static int getRandomNum(int from, int to, Random random) {
int x = to - from;
return random.nextInt(x + 1) + from;
}
四、补充
上面的方法都是java.util.Random类中的,但在java.lang.Math类中也有一个获取随机数的方法——double random()
,生成一个[0,1)之间的double类型随机数。
-
想得到一个[1,b)之间的随机数可以这样做:
// [0,1) * (b-1) + 1 = [0,b-1) + 1 = [1,b) Math.random() * (b-1) + 1;
-
想得到一个[a,b)之间的随机数可以这样做:
// [0,1) * (b-a) + b= [0,b-a) + a = [a,b) Math.random() * (b-a) + b