这个对于多数人来说是一个非常简单的问题,但是一稍稍的不注意,这个问题可就不是这么简单了,就我而言这个问题我整整思考了一天才发现的漏洞,期间问过kimi,找过gtp都是无功而返,最后突然想到解决办法。
话不多说先上代码
public static void main(String[] args) {
//创建一个随机数
Random sc =new Random();
//创建两个数组分别存放
int [] arr ={1,2,3,4,5,6};
int [] arr1= new int[arr.length];
for (int i = 0; i <arr.length;) {
int c =sc.nextInt(arr.length);
// 定义一个变量来存放数组随机数
int price = arr[c];
//利用循环把price和新数组中的每一个数进行比较
boolean flag= false; // 如果此处为flag =true
for (int i1 = 0; i1 < arr.length; i1++) {
if(price==arr1[i1]){
flag =true; // flag = false ,不存在flag仍为false
}
}
//如果flag 变为true 说明arr1数值中已经存在了price需要换一个
if(!flag){ //!flag ,为!true 则为flase,因此此if语句一直并未执行
arr1[i]= price;
i++;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr1[i]);
}
}
或者利用哈希来完美解决
public static void main(String[] args) {
int[] tempArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
Set<Integer> usedValues = new HashSet<>(); // 使用HashSet来存储已选取的值
int[] newTempArr = new int[tempArr.length];
Random rand = new Random();
for (int i = 0; i < newTempArr.length; i++) {
int price;
do {
price = tempArr[rand.nextInt(tempArr.length)];
} while (usedValues.contains(price)); // 如果已选取过,重新生成
newTempArr[i] = price;
usedValues.add(price); // 将已选取的值加入HashSet
}
for (int i1 = 0; i1 < newTempArr.length; i1++) {
System.out.println(newTempArr[i1]);
}
}
}
以及使用while循环
public static void main(String[] args) {
int[] tempArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
//创建一个新的数组来存储打乱顺序后的数据
int[] newTempArr = new int[tempArr.length];
//创建一个随机数,使得随机数的范围在数组tempArr中
Random rand = new Random();
int i =0;
while (true) {
int random = rand.nextInt(tempArr.length);
//使tempArr数组中的随机一个值赋值给price
int price = tempArr[random];
//创建方法如果price在newTempArr数组中那么需要重新获取随机数
boolean flag = check(price,newTempArr);
if(!flag){
continue;
}
else {
//如果price不存在于newTempArr数组中
newTempArr[i] = price;
i++;
if (i == newTempArr.length - 1) {
break;
}
}
}
for (int i1 = 0; i1 < newTempArr.length; i1++) {
System.out.println(newTempArr[i1]);
}
}
public static boolean check(int price, int[] newTempArr) {
for (int i = 0; i < newTempArr.length; i++) {
if (price == newTempArr[i]) {
return false;
}
}
return true;
}
}
实不相瞒,本人便是卡在了while循环里面时对boolean的判断之中导致今日郁郁不得志,整天思考此件事,最终获解真是如释重负,个人建议不会的代码不会的逻辑,就要死磕,必须整明白的,不然会特别难受,好了去吃火锅了。