我有两个随机生成的变量。 LoadG4输出到一个按钮,其他3个按钮对于生成的randoms1具有不同的值。我的目标是确保随机生成的randoms1的值不等于LoadG4。例如,如果范围在0到9之间,而LoadG4最终为3,则randoms1.nextint中的其他随机数不能为3.例如,它们可以是7,4或5,但不一样LoadG4。
这是我的代码:
Random GenerateG4 = new Random();
int loadG4 = GenerateG4.nextInt(10);
Random randoms1 = new Random();
final TextView number = (TextView) findViewById(R.id.number);
number.setText(""+loadG4);
for(int allrbA=0; allrbA<4; allrbA++) {
selectrb[allrbA].setText(""+randoms1.nextInt(10));
}
selectrb[rbselector].setText(""+loadG4);
我怎么能这样做?
非常感谢提前。
更新代码:
if (rbvalue==loadG4) {
int realrbvalue = rbvalue++;
selectrb[allrbA].setText(""+realrbvalue);
}
else {
selectrb[allrbA].setText(""+rbvalue);
}
}
为什么这仍然不起作用?
答案 0 :(得分:1)
以下内容应该让您走上正轨。我们的想法是,对于第二次提取,我们将范围缩小一。如果提取的数字小于先前提取的数字,那就很好。如果没有,那么我们向它添加1以获得范围[v1 + 1,n]中的数字:
Random r = new Random();
int v1 = r.nextInt(n);
int v2 = r.nextInt(n-1);
if (v2 >= v1)
v2++
答案 1 :(得分:0)
评论的变体:
INDEX ON
评论提案是为for(int allrbA=0; allrbA<4; allrbA++) {
int r = randoms1.nextInt(10 - 1); // range one less because one will be skipped
if (r == load4G) r = 9; // don't want this one, take the one
// that would have been included in the full range
selectrb[allrbA].setText("" + r);
}
添加一个随机值r
,这意味着r >= load4G
的最终值永远不会等于load4G - 具有相同的净效果
使用循环重新生成新的随机数:
r
如果 all 随机数必须不同,(Fisher-Yates)shuffle将是一个合适的解决方案。
答案 2 :(得分:0)
创建一个数组,然后检查数组中是否已存在新的随机数。虽然您只有4个循环的循环,但它不会影响性能,但在此解决方案中所有数字将是随机的。
int arr[] = new int[4];
for(int allrbA=0; allrbA<4; allrbA++) {
int num;
do{
num = randoms1.nextInt(10);
}
while(!Arrays.asList(arr).contains(num));
arr[allrbA] = num;
}