117.info
人生若只如初见

java数组随机数不能重复如何解决

要解决Java数组随机数不能重复的问题,可以使用以下方法:

  1. 使用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 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算法,该算法通过交换数组元素的位置来生成不重复的随机数。
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算法。可以根据具体的需求选择使用哪种方法。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe9faAzsLBQdQBVI.html

推荐文章

  • java怎么编写一个circle类

    要编写一个Circle类,可以按照以下步骤进行操作: 创建一个Java类文件,命名为Circle.java。
    在Circle类中定义私有的实例变量,用于表示圆的半径。可以使用...

  • java怎么比较三个对象的字段大小

    要比较三个对象的字段大小,需要通过比较对象的字段来判断大小。下面是一个示例代码,比较了三个对象的某个字段大小:
    import java.util.Comparator; publi...

  • 怎么用java压缩文件夹下所有文件

    你可以使用Java的ZipOutputStream类来压缩文件夹下的所有文件。以下是一个示例代码:
    import java.io.*;
    import java.util.zip.ZipEntry;
    import...

  • java高效字符串替换的方法是什么

    Java中高效的字符串替换方法是使用StringBuilder类的replace方法。这个方法可以在StringBuilder对象中替换指定的字符序列,并返回替换后的StringBuilder对象。

  • C++ assert函数的用法是什么

    C++中的assert函数是一种断言函数,用于在程序中检查条件是否为真。它接受一个表达式作为参数,并在表达式为假时终止程序执行,并输出相应的错误信息。
    ass...

  • c语言怎么求数组长度

    在C语言中,可以使用sizeof运算符来求解数组的长度。
    例如,假设我们有一个整型数组arr,可以通过以下方式求解其长度:
    int arr[] = {1, 2, 3, 4, 5};...

  • c语言数组产生异常数据怎么解决

    在C语言中,当数组产生异常数据时,可以通过以下几种方式解决: 检查数组越界:数组越界是最常见的导致异常数据的原因之一。可以通过检查数组的索引是否超出了数...

  • C++中getasynckeystate用不了怎么解决

    如果在使用C++中的GetAsyncKeyState函数时遇到问题,可以尝试以下解决方法: 确保代码中包含了必要的头文件:#include 确保程序的编译选项正确设置,例如使用了正...