我有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);
}
这是最好的方法吗?我怎么能这样做?
答案 0 :(得分:1)
(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
。根据{{1}}是否等于c
,a
选择了一个或两个选项。我们为b
“掷骰子”并找到c
适合的位置。
答案 1 :(得分:1)
您可以先为c
分配一个值,然后根据该值随机分配其他变量:
c = random.nextInt(3) + 1;
do
{
a = random.nextInt(3) + 1;
} while(a == c);
do
{
b = random.nextInt(3) + 1;
} while(b == c);