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