2 回答

TA貢獻1809條經驗 獲得超8個贊
這個想法是在集合中有N個元素,你會從中選擇數字,直到它被耗盡。類似的東西
List<Integer> temp = IntStream.range(0, 6).boxed().collect(Collectors.toList());
int[] array = new int[6];
while (temp.size() > 0) {
int rndIndex = ThreadLocalRandom.current().nextInt(temp.size());
array[temp.size() - 1] = temp.get(rndIndex);
temp.remove(rndIndex);
}
System.out.println(Arrays.toString(array)); // could be [4, 5, 3, 2, 1, 0]
如果您不想使用臨時列表,則可以這樣做,但這需要更多的代碼。這個想法是一樣的。

TA貢獻1884條經驗 獲得超4個贊
使用排序地圖怎么樣,你的鍵將是隨機的,就像這樣:
public static int[] derangement(int n){
Random rand = new Random();
int[] result = new int[n];
SortedMap<Double, Integer> map = new TreeMap<>();
for (int i = 0; i < n; i++) {
map.put(rand.nextDouble(), i);
}
int i = 0;
for (Double key: map.keySet()) {
result[i] = map.get(key);
i++;
}
return result;
}
這樣,當地圖中的隨機鍵變為有序時,您將對列表進行隨機排序。
添加回答
舉報