【问题标题】:Generate random and unique integer values生成随机且唯一的整数值
【发布时间】:2020-04-06 23:27:35
【问题描述】:

我想创建一个方法来生成从 0 到 999 的随机和唯一数字。我尝试做的是生成随机唯一数字,然后将它们添加到向量中,以便每次我调用该方法时将生成一个随机数,然后将其与之前生成的数字进行比较,看看它是否唯一。如果不是,则重复该过程。这就是想法,但每次我运行程序时,我都会得到“数组索引超出范围:0”。

我已经将类开头的向量初始化为private Vector<Integer> uniqueNums;

public int returnRandom() {
        Random r = new Random();
        int rand = r.nextInt(10000);

        if(this.uniqueNums.capacity() != 0) {
            for(int i = 0; i < this.uniqueNums.capacity(); i++) {
                if(rand == this.uniqueNums.get(i))
                    returnRandom();
            }
        }
        this.uniqueNums.add(rand);
        return rand;
    }

【问题讨论】:

  • 简单的方法是将0到999之间的整数添加到List,然后调用Collections.shuffle来随机化元素。然后您可以从列表的头部或尾部删除项目以获得唯一的随机数。
  • @dnault 我尝试这样做的方式有什么问题?
  • @JohnEm — 你现在的做法是,选择一个随机数并搜索列表以查看该数字是否在其中;如果它你必须再次选择。开始没问题,但想象一下,当您使用了几乎所有的数字时。假设您只剩下 2 个位置需要填补,而您唯一没有使用的 2 个数字是 117 和 842……您从 0 到 999 中随机选择一个,搜索 998 成员列表,您将可能 i> 已经用过那个号码,所以你再选一次;好吧,您可能也使用过那个,所以您一次又一次地选择。填充最后 2 个插槽可能需要 非常 很长时间。

标签: java


【解决方案1】:

看起来好像您已经声明了 uniqueNums,但没有为其分配任何值。数组索引超出空值范围。尝试将其初始化为某个空值,看看是否有帮助。

无论如何,这似乎是一种创建“独特随机数”的奇怪方式。我会接受 dnault 的建议。

【讨论】:

  • 我尝试添加 2 个初始值,结果“数组索引超出范围:0”更改为“数组索引超出范围:1”
猜你喜欢
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
相关资源
最近更新 更多