题目见 B站 av93347594 149P
实现功能:
生成5个不重复的随机数, 将它们放进一个数组中
我最后完成的代码:
import java.util.Random;
public class GenRandom {
public static void main(String[] args) {
int[] a = new int[5];
int i = 0;
Random r = new Random();
// while (i < a.length) {
// int temp = r.nextInt(5);
// int j = 0;
// while (j < i) {
// if (temp == a[j]) {
// temp = r.nextInt(5);
// System.out.println("重新生成一次随机数");
// }
// j++;
// }
// a[i++] = temp;
// }
while (i < a.length) {
int toInsert = r.nextInt(6);
int[] tempa = new int[i+1];
System.arraycopy(a,0,tempa,0,tempa.length);
while (containsEle(tempa,tempa.length,toInsert)) {
toInsert = r.nextInt(6);
System.out.println("执行一次随机数生成");
}
a[i++] = toInsert;
System.out.println("执行一次写入");
}
for (int ele:a){
System.out.println(ele);
}
}
static boolean containsEle(int[] a,int length, int b) {
for (int i = 0; i < length; i++) {
if (b == a[i]) return true;
}
return false;
}
}
老杜在 150P 给出的答案
import java.util.Arrays;
import java.util.Random;
public class GenRandomAnswer {
public static void main(String[] args) {
Random random = new Random();
int[] arr = new int[5];
int index = 0;
for (int i = 0; i < arr.length ; i++) {
arr[i] = -1;
}
while(index < arr.length) {
int num = random.nextInt(101);
if(!contains(arr, num)) {
arr[index++] = num;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static boolean contains(int[] arr, int key) {
/* 有BUG, 最终会打出两个-1
Arrays.sort(arr);
// 使用二分法查找
return Arrays.binarySearch(arr, key) >= 0;
*/
for (int i = 0; i < arr.length; i++) {
if (arr[i] == key) return true;
}
return false;
}
}
中间老师尝试过使用二分法查找, 虽然最后翻车了
但是这个思路我压根没想到