为什么在我专门防止这种情况后,一个随机int与另一个随机int相同?

时间:2016-11-27 19:49:26

标签: java android

在我的程序中,会生成两个随机数。其中一个(rbvalue)介于0和8之间。另一个,loadG4介于0和9之间。如果rbvalue始终==作为loadG4,它将被设置为9.这样,这两个数字就永远不会等于。出于某种原因,在第一次单击按钮后代码存在缺陷(程序在每次单击按钮后循环)。在代码中可能存在不相关的多余信息,无论如何我都会把它放在与我们关注的随机生成和比较的冲突中。这是代码:

Random random = new Random();
int rbselector = random.nextInt(4);    //These three are declared outside of onCreate.
int loadG4 = random.nextInt(10);

for (int allrbA = 0; allrbA < 4; allrbA++) {
    int rbvalue = random.nextInt(9);
    if (rbvalue == loadG4) {
        rbvalue = 9;
    }
    selectrb[allrbA].setText("" + rbvalue);
}
selectrb[rbselector].setText("" + loadG4);

for (int allrbA = 0; allrbA < 4; allrbA++) {
    selectrb[allrbA].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Button clicked = (Button)v;
            String clickVal = (String)clicked.getText();
            int finalClick = Integer.valueOf(clickVal);

            if (finalClick == loadG4) {
                score++;
                for (int allrbA = 0; allrbA < 4; allrbA++) {
                    int rbvalue = random.nextInt(9);
                    loadG4 = random.nextInt(10);
                    if (rbvalue == loadG4) {
                        rbvalue = 9;
                    }
                    selectrb[allrbA].setText("" + rbvalue);
                }
                number.setText("" + loadG4);
                rbselector = random.nextInt(4);
                selectrb[rbselector].setText("" + loadG4);
            }
        }
    });
}

非常感谢提前。

编辑:尝试不同的方法不会起作用。这已经过测试,似乎问题必须来自我的代码中的其他内容,但我不确定它是什么。

3 个答案:

答案 0 :(得分:1)

我不完全确定我是否理解你的问题,但我的理解是你有两个整数你想要随机生成,一个在0到9之间,另一个在0到8之间;这些数字永远不应该相同。另外,我编写了我的解决方案,假设.nextInt()是独占的,你应该在java文档中确认这一点。

以下是我将如何解决这个问题:

Random r = new Random();
int a = r.nextInt(10);
int b = r.nextInt(9);

while(a==b)
      b = r.nextInt(9);

这只是生成两个随机整数,并且如果它们彼此相等则将继续随机生成int b的值,直到它不等于int a。

答案 1 :(得分:0)

我不确定原因,但在for循环上方移动loadG4 = random.nextInt(10);可以解决这个问题,有谁知道为什么?如果有人能回答这个问题,我会将其标记为正确答案。谢谢。

答案 2 :(得分:0)

你使用两次相似但不同的代码。 你做的第一个循环正常工作。听众中的人没有。

您在每次循环转弯时将loadG4设置为不同的值,这使得前一循环中的相等性测试变得迟钝。您需要在循环之前一次性设置loadG4,以便每次迭代都能正确测试与此值的相等性。