溫馨提示×

java數(shù)組隨機數(shù)不能重復(fù)如何解決

小億
93
2023-11-07 22:36:23
欄目: 編程語言

要解決Java數(shù)組隨機數(shù)不能重復(fù)的問題,可以使用以下方法:

  1. 使用java.util.Random類生成隨機數(shù),并將生成的隨機數(shù)存入Set集合中。由于Set集合不允許重復(fù)元素,因此可以保證生成的隨機數(shù)不重復(fù)。然后,將Set集合轉(zhuǎn)換為數(shù)組。
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("生成不了指定范圍內(nèi)的不重復(fù)隨機數(shù)!");
        }
        
        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;
    }
}
  1. 另一種方法是使用Fisher-Yates算法,該算法通過交換數(shù)組元素的位置來生成不重復(fù)的隨機數(shù)。
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("生成不了指定范圍內(nèi)的不重復(fù)隨機數(shù)!");
        }
        
        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;
    }
}

這兩種方法都是通過生成隨機數(shù)并存入數(shù)組中,保證隨機數(shù)不重復(fù)。第一種方法使用了Set集合,第二種方法使用了Fisher-Yates算法??梢愿鶕?jù)具體的需求選擇使用哪種方法。

0