我在实现返回大小n的随机紊乱的方法时遇到问题。我不确定我的代码出了什么问题,我需要帮助找出逻辑上错误的地方。
这是针对一个小程序,我只是想写,但在可视化逻辑流时遇到问题。我尝试过更改 while 循环的条件,但到目前为止,我尝试过的任何方法都不起作用。我也尝试过使用列表和数组列表来实现,但是当我试图将其放入代码中时,它变得有点太复杂了。
有没有更简单的方法可以做到这一点?
public static int[] derangement(int n){
int[] arr1 = new int[n];
int[] arr2 = new int[n];
//second array is to keep track of which positions are 'taken' to prevent collision
Random rand = new Random();
int temp = -1;
for(int i =0; i <n; i++){
arr1[i] = i;
}
for(int k=0;k<n;k++){
arr2[k] = -1;
}
for(int j=0;j<n;j++){
temp = j;
while (temp == j || arr2[j] != -1){
temp = rand.nextInt(n); //generate a random number until it gives one that hasn't been used before
if(arr2[temp] == -1){
arr2[temp] = j;
}
}
}
return arr2;
}
我期望输出为 [2,4,1,5,3,0] 对于 n = 6,但我只是得到 [-1,-1,-1,-1,-1,-1,-1,-1]
海绵宝宝撒
慕村9548890
相关分类