在我的程序中,会生成两个随机数。其中一个(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);
}
}
});
}
非常感谢提前。
编辑:尝试不同的方法不会起作用。这已经过测试,似乎问题必须来自我的代码中的其他内容,但我不确定它是什么。
答案 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,以便每次迭代都能正确测试与此值的相等性。