Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 随机生成的唯一数_Java_Arrays - Fatal编程技术网

Java 随机生成的唯一数

Java 随机生成的唯一数,java,arrays,Java,Arrays,我正在为一维和二维数组编写一个程序,该数组生成4096个随机唯一整数。我一直在使用我的方法来确定是否已经使用了一个整数,如果已经使用了,抛出它并获得一个新的整数。目前,我得到了一个越界异常错误,我已经查找了如何删除oob,但我没有发现任何与我的程序相关的有用信息。有人能看一下我的代码,让我知道需要修改什么才能使逻辑正常工作吗?谢谢 二维阵列: Random random = new Random(); int[][] arrayone = new int[4097][1]; boolean[]

我正在为一维和二维数组编写一个程序,该数组生成4096个随机唯一整数。我一直在使用我的方法来确定是否已经使用了一个整数,如果已经使用了,抛出它并获得一个新的整数。目前,我得到了一个越界异常错误,我已经查找了如何删除oob,但我没有发现任何与我的程序相关的有用信息。有人能看一下我的代码,让我知道需要修改什么才能使逻辑正常工作吗?谢谢

二维阵列:

Random random = new Random();

int[][] arrayone = new int[4097][1];
boolean[][] used = new boolean[4097][1];

for(int b = 0; b < arrayone.length; b++) {
    for(int i = 0; i < arrayone[b].length; i++) {
        for (int number = 0; number < used.length; number++) {
            for (int x = 0; number <used[number].length; x++) {

                number = random.nextInt(99999)+1;

                if (!used[number][x]){
                    used[number][x] = true;
                    arrayone[b][i] = number;
                }
                else {
                    while(used[number][x]) {
                        number = (int)(Math.random() * 99999 + 1);
                        if (!used[number][x]) {
                            used[number][x] = true;
                            arrayone[b][i]=number;
                            break;
                        }
                    }
                }
            }
        }
    }
}
Random Random=new Random();
int[]arrayone=新int[4097][1];
boolean[]used=新的boolean[4097][1];
for(int b=0;b
boolean[] used = new boolean[4097];
但尝试访问:

int number = (int)(Math.random() * 99999 + 1);
if (!used[number])
这里的
数字可能大于4096。这就是为什么会出现越界异常错误。2D数组也是如此

要解决此问题,只需在声明时增加数组大小。

最好的方法是使用存储已生成的数字,以便轻松知道它们是否已添加/生成,如下所示:

Random random = new Random();
int[][] arrayone = new int[4097][1];
// Create my set of already generated numbers
Set<Integer> existingNumbers = new HashSet<>();
for(int b = 0; b < arrayone.length; b++) {
    for(int i = 0; i < arrayone[b].length; i++) {
        // Loop as long as the generated number cannot be added into the Set
        // indicating that it has already been added so already been generated
        int number;
        do {
            number = random.nextInt(99999) + 1;
        } while (!existingNumbers.add(number));
        // Add the number in my array
        arrayone[b][i] = number;
    }
}
Random Random=new Random();
int[]arrayone=新int[4097][1];
//创建我已经生成的数字集
Set existingNumbers=new HashSet();
for(int b=0;b
尝试使用[sets][1],而不是使用两个数组来存储值和是否使用数字。它们很容易插入数据,并检查它们是否已经存在[1]:[2]:
Random random = new Random();
int[][] arrayone = new int[4097][1];
// Create my set of already generated numbers
Set<Integer> existingNumbers = new HashSet<>();
for(int b = 0; b < arrayone.length; b++) {
    for(int i = 0; i < arrayone[b].length; i++) {
        // Loop as long as the generated number cannot be added into the Set
        // indicating that it has already been added so already been generated
        int number;
        do {
            number = random.nextInt(99999) + 1;
        } while (!existingNumbers.add(number));
        // Add the number in my array
        arrayone[b][i] = number;
    }
}