java产生不重复的随机整数
时间: 2023-11-23 07:06:20 浏览: 29
如果要高效地生成一组不重复的随机整数,可以使用Fisher-Yates洗牌算法。该算法的基本思想是将待打乱的数组看作有序的部分和无序的部分,然后每次从无序部分随机选择一个元素,放到有序部分的末尾,直到无序部分为空。这样可以保证每个元素被选择的概率相等,从而生成的随机数也是不重复的。
下面是一个示例代码:
```java
import java.util.Random;
public class RandomNumberGenerator {
public static void main(String[] args) {
int[] nums = generateRandomNumbers(1, 100, 10);
for (int num : nums) {
System.out.print(num + " ");
}
}
public static int[] generateRandomNumbers(int min, int max, int count) {
Random random = new Random();
int[] nums = new int[count];
for (int i = 0; i < count; i++) {
nums[i] = i + min;
}
for (int i = count - 1; i > 0; i--) {
int j = random.nextInt(i + 1);
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
return nums;
}
}
```
代码中使用了Fisher-Yates洗牌算法来生成不重复的随机整数。首先,生成一个包含指定数量的整数的数组,然后从数组的最后一个元素开始,每次随机选择一个在当前位置之前的位置,将该位置的元素与当前位置的元素交换,直到遍历完整个数组。这样就可以得到一组不重复的随机整数了。
注:在上面的示例代码中,生成的随机整数的范围为[min, max],包括min和max。