编写程序,生成5个不重复的随机数[0-100]。重复的话重新生成。最终生成的5个随机数放到数组中,要求数组中这5个随机数不重复。
package com.company.random;
import java.util.Random;
/*
编写程序,生成5个不重复的随机数[0-100]。重复的话重新生成。
最终生成的5个随机数放到数组中,要求数组中这5个随机数不重复。
*/
public class RandomTest02 {
public static void main(String[] args) {
// 创建Random对象
Random r = new Random();
// 准备一个长度为5的一维数组。
int[] arr = new int[5]; // 默认都是0
for (int i = 0;i<arr.length;i++) {
arr[i] = -1; // 初始化让数组初始值为-1
}
int index = 0;
while (index < 5) {
int a = r.nextInt(101); // [0,100]
// 判断arr有没有这个a
// 如果没有这个num,就放进去。
if(!contains(arr, a)){
arr[index++] = a;
}
}
// 遍历以上的数组
for (int i : arr) {
System.out.println(i);
}
}
/**
* 单独编写一个方法,这个方法专门用来判断数组中是否包含某个元素
* @param arr 数组
* @param key 元素
* @return true表示包含,false表示不包含。
*/
public static boolean contains(int[] arr, int key){
/*
// 这个方案bug。(排序出问题了。)
// 对数组进行升序
//Arrays.sort(arr);
// 进行二分法查找
// 二分法查找的结果 >= 0说明,这个元素找到了,找到了表示存在!
//return Arrays.binarySearch(arr, key) >= 0;
*/
for(int i = 0; i < arr.length; i++){
if(arr[i] == key){
// 条件成立了表示包含,返回true
return true;
}
}
// 这个就表示不包含!
return false;
}
}
运行结果:
对数组进行升序
Arrays.sort(arr);
: arr:[-1,-1,-1,-1,-1]
生成10 放在arr[0]
-》 [10,-1,-1,-1,-1]Arrays.sort(arr)
⇒ 变成[-1,-1,-1,-1,10]
生成8 放在arr[1]
-》 [-1,8,-1,-1,10]Arrays.sort(arr)
⇒ 变成[-1,-1,-1,8,10]
生成7 放在arr[2]
-》 [-1,-1,7,8,10]Arrays.sort(arr)
⇒ 变成[-1,-1,7,8,10]
生成6 放在arr[3]
-》 [-1,-1,7,6,10]Arrays.sort(arr)
⇒ 变成[-1,-1,6,7,10]
生成5 放在arr[4]
-》 [-1,-1,7,6,5]Arrays.sort(arr)
⇒ 变成[-1,-1,5,6,7]
输出 [-1,-1,5,6,7]
不符合条件