random.next如何避免重復(fù)值問(wèn)題

小樊
102
2024-07-04 19:26:20

要避免重復(fù)值問(wèn)題,可以采取以下方法:

  1. 使用Set來(lái)存儲(chǔ)已經(jīng)生成過(guò)的隨機(jī)數(shù),每次生成隨機(jī)數(shù)之前先檢查Set中是否包含這個(gè)隨機(jī)數(shù),如果包含則重新生成一個(gè)新的隨機(jī)數(shù)。
Set<Integer> set = new HashSet<>();
Random random = new Random();

int nextRandom;
do {
    nextRandom = random.nextInt();
} while(set.contains(nextRandom));
set.add(nextRandom);
  1. 可以將生成的隨機(jī)數(shù)存儲(chǔ)到一個(gè)數(shù)組中,每次生成隨機(jī)數(shù)之前先從數(shù)組中隨機(jī)選擇一個(gè)值,并將其與數(shù)組最后一個(gè)元素進(jìn)行交換,隨機(jī)數(shù)的范圍縮小到數(shù)組中前面的元素。
int[] randomArr = new int[N];
for (int i = 0; i < N; i++) {
    randomArr[i] = random.nextInt();
}

int nextRandom = randomArr[N - 1];
int index = random.nextInt(N - 1);
int temp = randomArr[index];
randomArr[index] = randomArr[N - 1];
randomArr[N - 1] = temp;

這樣每次生成的隨機(jī)數(shù)都不會(huì)重復(fù),可以有效避免重復(fù)值問(wèn)題。

0