Random 随机分配3个变量

Random 随机分配3个变量,random,logic,Random,Logic,我有3个变量,a,b和c,我想随机给它们分配3个可能的数字,1,2或3。a可以等于b,但c也可以不等于。 所以如果a=2和=1,那么c=3。 如果a=1,b=1,那么c必须是2或3(随机) 目前我有: a和b=随机值。然后: if (a == b) { do { c = (int)(Math.random()*3); } while (c == a); } else { do { c = (int)(Math.rando

我有3个变量,a,b和c,我想随机给它们分配3个可能的数字,1,2或3。a可以等于b,但c也可以不等于。 所以如果a=2和=1,那么c=3。 如果a=1,b=1,那么c必须是2或3(随机)

目前我有: a和b=随机值。然后:

if (a == b)
{
    do 
    {
        c = (int)(Math.random()*3); 
    } while (c == a);
} else
{
    do
    {
        c = (int)(Math.random()*3); 
    }while (c == a || c == b);
}
这是最好的方式吗?否则我怎么做呢?

(1)打电话生成一个随机数是你在这里做的最昂贵的事情,所以你应该尽可能少地做(两次或三次)

(2) 您可能更喜欢
java.util.Random
,特别是如果您想要
int
s

java.util.Random random = new java.util.Random();
int a = random.nextInt(3) + 1;
int b = random.nextInt(3) + 1;
int c = 0;
for(int n = a == b ? random.nextInt(2) : 0; n >= 0; n--) {
    do {
      c++;
    } while(c == a || c == b);
}
这将是“一致”随机的

说明:


我们首先从三个选项中随机选择
a
b
。对于
c
,我们只有一个或两个选择,这取决于
a
是否等于
b
。我们为
c
掷骰子,并找到
c
适合的位置。

您可以首先为
c
赋值,然后在此基础上,随机分配其他变量:

c = random.nextInt(3) + 1;
do 
{
   a = random.nextInt(3) + 1;
} while(a == c);
do
{
   b = random.nextInt(3) + 1;
} while(b == c);