【发布时间】: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