阅读量:0
要解决Java数组随机数不能重复的问题,可以使用以下方法:
- 使用java.util.Random类生成随机数,并将生成的随机数存入Set集合中。由于Set集合不允许重复元素,因此可以保证生成的随机数不重复。然后,将Set集合转换为数组。
import java.util.HashSet; import java.util.Random; import java.util.Set; public class RandomArray { public static void main(String[] args) { int[] array = generateRandomArray(10, 1, 100); for (int num : array) { System.out.println(num); } } public static int[] generateRandomArray(int length, int min, int max) { if (length > (max - min + 1)) { throw new IllegalArgumentException("生成不了指定范围内的不重复随机数!"); } Random random = new Random(); Set<Integer> set = new HashSet<>(); while (set.size() < length) { int randomNum = random.nextInt(max - min + 1) + min; set.add(randomNum); } int[] array = new int[length]; int index = 0; for (int num : set) { array[index++] = num; } return array; } }
- 另一种方法是使用Fisher-Yates算法,该算法通过交换数组元素的位置来生成不重复的随机数。
import java.util.Random; public class RandomArray { public static void main(String[] args) { int[] array = generateRandomArray(10, 1, 100); for (int num : array) { System.out.println(num); } } public static int[] generateRandomArray(int length, int min, int max) { if (length > (max - min + 1)) { throw new IllegalArgumentException("生成不了指定范围内的不重复随机数!"); } int[] array = new int[length]; Random random = new Random(); for (int i = 0; i < length; i++) { int randomIndex = random.nextInt(max - min + 1 - i) + i; array[i] = randomIndex; int temp = array[i]; array[i] = array[randomIndex]; array[randomIndex] = temp; } for (int i = 0; i < length; i++) { array[i] = array[i] + min; } return array; } }
这两种方法都是通过生成随机数并存入数组中,保证随机数不重复。第一种方法使用了Set集合,第二种方法使用了Fisher-Yates算法。可以根据具体的需求选择使用哪种方法。