随机产生的唯一编号

米莉

我正在为一个1d和2d数组编写程序,该程序生成4096个随机和唯一整数。我被困在确定整数是否已被使用的方法上,如果有的话,将其抛出并获得一个新的整数。当前,我遇到了异常错误,并且我已经找到了如何删除oob的方法,但是我没有找到与我的程序相关的任何帮助。有人可以看看我的代码,让我知道需要更改哪些内容才能使逻辑正确工作吗?谢谢!

2D阵列:

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;
                        }
                    }
                }
            }
        }
    }
}

一维阵列

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

for(int i = 0; i < arrayone.length; i++) {
    int number = (int)(Math.random() * 99999 + 1);

    if (!used[number]){
        used[number] = true;
        arrayone[i] = number;
    }
    else {
        while(used[number]) {
            number = (int)(Math.random() * 99999 + 1);
            if (!used[number]) {
                used[number] = true;
                arrayone[i]=number;
                break;
            }
        }
    }
}
沙希德

因为您声明:

boolean[] used = new boolean[4097];

但是尝试访问:

int number = (int)(Math.random() * 99999 + 1);
if (!used[number])

在这里,number可能大于4096。这就是为什么您越界异常错误。2D数组也是如此。

为了解决这个问题,只需在声明时增加数组大小即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档