【发布时间】:2021-12-30 14:39:46
【问题描述】:
我应该采用一个整数数组,从 0 开始,一直到其他一些称为卡的 int 数组的长度为 1(具有用户输入的长度),并完全随机化它,使得没有数字在原来的位置。
我想出了如何生成第一个数组,但我完全不知道如何完全随机化一个数组,有人可以帮忙吗?
到目前为止,我有:
int size = cards.length;
int[] numberList = new int[size];
for (int i = 0; i < size; i++) {
numberList[i] = i;
}
更新:
private int[] shuffleIndex() {
int size = cards.length;
int[] numberList = new int[size];
for(int i = 0; i < size; i++) {
numberList[i] = i;
}
randomizer(numberList);
return numberList;
}
private int[] randomizer(int[] input) {
int size = input.length;
Random random = new Random();
for (int i = size -1; i > 0; i--) {
int j = random.nextInt(i + 1);
int temp = input[i];
input[i] = input[j];
input[j] = temp;
}
for(int i = 0; i < size; i++) {
if(input[i] == i) {
randomizer(input);
}
}
return input;
}
【问题讨论】:
-
您如何防止随机化获得相同的元素?这就是我最初尝试的方法,但没有奏效。
-
对不起,我假设就地改组。
-
-
此答案适用于 C#,但您应该能够将其转换为 Java:stackoverflow.com/a/28740197/6395627。它本质上只是重复Fisher-Yates shuffle 算法,直到满足“原始位置没有元素”的条件。