在生成数字对的随机列表时避免重复的方法不能正常工作

时间:2012-01-25 11:06:55

标签: java

我有这个代码用于在boolean [] []中将随机值设置为true,而不做任何重复:

    int a = 0;
    int b = 0;
    int counter = 0;

    for (int i=0; i<=50; i++) {                                         
        do {
            a = randomizer.nextInt(hoogte);                                 
            b = randomizer.nextInt(breedte);    
            /**debug variable*/
            counter++;
        } while (bommaker[a][b]);

        bommaker[a][b] = true; 
    }

经过一段时间的测试后,我注意到出了问题,所以我添加了一个计数器来检查它。每次我运行程序时,都会出现一个与“计数器”不同的数字。有一次它是57而另一次是63.但是我已经将循环设置为51.这意味着代码不能正常工作。有人可以解释为什么它产生超过51个数字,并给出一个可能的解决方案吗?

2 个答案:

答案 0 :(得分:4)

你必须记住你在循环中有一个循环。 OUTTER循环限制为51次执行,但内部循环将导致随机的迭代次数(每次看到数组已设置为true时进行额外迭代)。

除了计数器值大于您的预期之外,代码还没有用?

答案 1 :(得分:0)

从do while循环移出计数器++行

int a = 0;
int b = 0;
int counter = 0;

for (int i=0; i<=50; i++) {                                         
    do {
        a = randomizer.nextInt(hoogte);                                 
        b = randomizer.nextInt(breedte);    
        /**debug variable*/
    } while (bommaker[a][b]);

    counter++;

    bommaker[a][b] = true; 
}