Android从指定范围中选择2个随机int

时间:2012-12-12 16:18:22

标签: java android

在我的Android应用中,我需要从指定范围中选择两个随机整数。下面的代码可以工作,但它并不是真正选择一个随机整数,它正在改变整数。而让我烦恼的是,由于代码中的randomNum2= (int)it.next();位,我必须将max int指定为小于实际最大值的一个。如果我将正确的数字(当前为127)作为最大值,那么我得到错误java.util.NoSuchElementException,因为它正在寻找128作为下一次迭代。在我使用rand = new Random(); randomNum1 = rand.nextInt(max - min + 1) + min; randomNum2 = rand.nextInt(max - min + 1) + min;之前,问题是两个随机的整数可能最终是相同的,我需要它们是唯一的。那么有谁能建议一个更好的方法从最小/最大整数范围获得两个随机数?这是我的代码:

    int min = 1;
int max = 126;
int randomNum1;
int randomNum2;
List<Integer> choicesL;

public void randomTwo() {
    choicesL = new LinkedList<Integer>();
    for (int i = min; i <= max; i++) {
        choicesL.add(i);
    }
    Collections.shuffle(choicesL);
    Iterator<Integer> it = choicesL.iterator();
    while (it.hasNext())
    {
        randomNum1= (int)it.next();
        randomNum2= (int)it.next();

    }

}

2 个答案:

答案 0 :(得分:1)

您可以使用旧代码,但可以使用循环播放。

rand = new Random(); 
randomNum1 = rand.nextInt(max - min + 1) + min;
randomNum2 = rand.nextInt(max - min + 1) + min;

while (randomNum2==randomNum1){
    randomNum2 = rand.nextInt(max - min + 1) + min;
}

修改

有很多方法可以查找随机数。我不知道你是否知道这一点,但在这之下有很多统计研究。如果你需要一种快速计算随机数的方法,这很好。但是你必须知道,在很长一段时间后,用户可以知道随机数的分布情况。如果您想改进代码,可以查看:

http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform

http://en.wikipedia.org/wiki/Ziggurat_algorithm

当然,我认为网上还有更多的理论

答案 1 :(得分:0)

您可以使用Set并继续插入元素,直到该集合的大小为2。
对于少量元素(与范围的大小相比),这应该比填充和混洗列表更有效。

int max = 126;
int min = 1;
int size = 2;
Set<Integer> set = new HashSet<Integer>();
Random r = new Random();
while (set.size() != size) {
    set.add(r.nextInt(max - min + 1) + min);
}
System.out.println(set);

注意:这是一个通用答案,适用于所有需要的尺寸(当然假设为size <= max - min