while循环中的随机数

时间:2014-03-13 12:05:15

标签: java eclipse random

我正在使用Eclipse IDE开发一个使用Java的项目。现在,我想要实现的是我想要使用Random()函数生成3个不同的随机数。我希望它们在0到3之间,包括0,1和2.我有这个小算法以不同的方式生成每个值。

    Random rnd = new Random();
    rand1=rnd.nextInt(3);
    rand2=rand1;
    rand3=rand1;
    while(rand2==rand1){
        rand2=rnd.nextInt(3);
    }
    while(rand3==rand1){
        rand3=rnd.nextInt(3);
    }

但此刻,我的代码仍然会生成像(1,0,0)或(2,1,1)这样的值。我找不到原因,谢谢你的帮助。

5 个答案:

答案 0 :(得分:1)

您可以将所有可能的值放在一个列表中,然后使用Collections.shuffle(list);对其进行随机播放,并阅读所需的第一个n值。

答案 1 :(得分:1)

那里的代码不符合您的规格。第一个循环将在rand2!= rand1时终止,第二个循环将在rand3!= rand1时终止。

三元组(1,0,0)满足这些条件,因为1!= 0和1!= 0(对于(2,2,2)也是如此)。你可能想要一个额外的条件,以确保rand3!= rand2:

Random rnd = new Random();
rand1=rnd.nextInt(3);
rand2=rand1;
rand3=rand1;
while(rand2==rand1){
    rand2=rnd.nextInt(3);
}
while(rand3==rand1 || rand3 == rand2){
    rand3=rnd.nextInt(3);
}

答案 2 :(得分:0)

这是因为您检查第二个和第三个随机数是否与第一个不同。你不检查rand2和rand3是否也不同。 你可以这样编辑最后一个:

while(rand3==rand1 || rand3 == rand2){
    rand3=rnd.nextInt(3);
}

答案 3 :(得分:-1)

您不检查rand2和rand3是否相等。此外,如果三个随机数不应该相等,您可以让第二个数字在最后两个可能性之间进行选择,并将第三个数字强制为左边的一个值。从技术上讲,它是可能的,你的代码没有结束。 ;)

答案 4 :(得分:-1)

你真的不想要随机数字 - 你真正想要的是随机返回六种排列中的一种

  • 0,1,2
  • 0,2,1
  • 1,0,2
  • 1,2,0
  • 2,0,1
  • 2,1,0