Java中随机数操作总结
在最近的实验中需要实现随机进程调度,随机排班等功能,需要使用到随机数,现将随机数的相关操作总结如下
1. 生成不重复随机数序列
在安排排班和进程调度时,需要将所有人或所有进程都安排到,且已经安排过的不能再次安排,也就是说需要用到一个有一定范围的不重复随机数序列,利用Java的Random类实现如下
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
import java.util.List;
// 生成1到10的随机不重复序列
public class RandomNumber {
public static void main(String[] args) {
for(int i = 0; i < 11; i ++)
numbers.add(i + 1);
int[] result = new int[k];
for(int i = 0; i < 11; i ++){
int r = generateRandomIndex(n - i);
result[i] = numbers.get(r);
numbers.remove(r);
}
Arrays.sort(result);
for(int i : result)
System.out.println(i);
}
// 获得0到n之间的随机数(不包括0,n)
private static int generateRandomIndex(int n){
Random random = new Random();
return random.nextInt(n);
}
}
2. 随机产生一个限定范围的long型数字
public long nextLong(Random rng, long n) {
long bits, val;
do {
bits = (rng.nextLong() << 1) >>> 1;
val = bits % n;
} while (bits-val+(n-1) < 0L);
return val;
}