У меня проблемы с реализацией метода, который возвращает случайное отклонение размера 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]