2014-03-13 172 views
0

我正在使用Eclipse IDE开发一个使用Java的项目。现在,我想要实现的是我想要使用Random()函数生成的3个不同的随机数。我希望他们介于0和3之间的值包括0,1和2.我有这个小算法来产生每个不同的。while循环中的随机数

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)这样的值。我找不到为什么,谢谢你的帮助。

+1

您需要'while(rand3 == rand1 || rand3 == rand2)'作为第二个while循环,否则第三个数字可以像你的例子那样等于第二个数字。其实,为什么不把第三个设置为不是第一个或第二个呢? – cactus1

+0

谢谢!这就是我正在寻找:) – YigitOzkavci

回答

-1

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

+0

谢谢,解决了它:) – YigitOzkavci

1

您可以将所有可能的值放在一个列表中,用Collections.shuffle(list);随机排序并读取您需要的第一个n值。

1

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

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

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); 
} 
0

这是因为你检查第二和第三随机数是从第一个只是不同而已。你不检查rand2和rand3是否也不同。 您可以编辑的最后,而这种方式:

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

你真的不想要的随机数 - 你真正想要的这里是随机返回的六个排列

  • 0,1之一, 2
  • 0,2,1
  • 1,0,2
  • 1,2,0
  • 2,0,1
  • 2,1,0