题目:
实现以下产生随机数的方法,修饰符为public static。
Integer randomDifferent(int n,int size) // 返回n个互异的随机数,范围是0~size-1
Integer randomSorted(int n,int size) // 返回n个排序的随机数
Integer randomDifferentSorted(int n,int size) // 返回n个互异的排序的随机数
代码:
public class Test {
public static void main(String[] args) {
// 测试,查看结果
for (Integer i : randomDifferentSorted(10, 100)) {
System.out.println(i);
}
}
/**
* 返回n个互异的随机数,范围是0~size-1
* 缺点:比较耗费时间
*
* @param n 随机数个数
* @param size 随机数大小限制值
* @return 装载随机数的数组
*/
public static Integer[] randomDifferent1(int n, int size) {
Integer[] values = new Integer[n];
int count = 0;
Integer value = 0;
while (count < n) {
value = (int) (Math.random() * size);
boolean flag = true;
for (Integer j : values) {
if (value.equals(j)) {
flag = false;
break;
}
}
if (flag) {
values[count] = value;
count++;
}
}
return values;
}
/**
* 返回n个互异的随机数,范围是0~size-1
* 优点:节省时间
*
* @param n 随机数个数
* @param size 随机数大小限制值
* @return 装载随机数的数组
*/
public static Integer[] randomDifferent2(int n, int size) {
Set<Integer> set = new HashSet<>();
Integer[] values = new Integer[n];
Integer value = 0;
while (set.size() < n) {
value = (int) (Math.random() * size);
set.add(value);
}
int count = 0;
for (Integer i : set) {
values[count] = i;
count++;
}
return values;
}
/**
* 返回n个排序的随机数
*
* @param n 随机数个数
* @param size 随机数大小限制值
* @return 装载随机数的数组
*/
public static Integer[] randomSorted(int n, int size) {
Integer[] values = new Integer[n];
Integer value = 0;
for (int i = 0; i < n; i++) {
value = (int) (Math.random() * size);
values[i] = value;
}
for (int i = 0; i < values.length - 1; i++) {
for (int j = 0; j < values.length - 1; j++) {
if (values[j].compareTo(values[j + 1]) > 0) {
Integer a = values[j];
values[j] = values[j + 1];
values[j + 1] = a;
}
}
}
return values;
}
/**
* 返回n个互异的排序的随机数
*
* @param n 随机数个数
* @param size 随机数大小限制值
* @return 装载随机数的数组
*/
public static Integer[] randomDifferentSorted(int n, int size) {
Integer[] values = randomDifferent2(n, size);
for (int i = 0; i < values.length - 1; i++) {
for (int j = 0; j < values.length - 1; j++) {
if (values[j].compareTo(values[j + 1]) > 0) {
Integer a = values[j];
values[j] = values[j + 1];
values[j + 1] = a;
}
}
}
return values;
}
}