因此,我希望在60%的时间内执行某项操作,并在40%的时间内执行另一项操作。而且有时它也没有。我能想到的最好的方法是通过开关和制作一堆案例。下面是一个例子,如果这对你没有任何意义。 我的问题是,有更好的方法吗? 有没有办法让案例0-5在一个语句中执行操作1?
Random rand = new Random(50);
switch(rand.nextInt())
{
case 1:
{
do action 1
}
break;
case 2:
{
do action 1
}
break;
case 3:
{
do action 1
}
break;
case 4:
{
do action 1
}
break;
case 5:
{
do action 1
}
break;
case 6:
{
do action 1
}
break;
case 7:
{
do action 2
}
break;
case 8:
{
do action 2
}
break;
case 9:
{
do action 2
}
break;
case 10:
{
do action 2
}
break;
}
答案 0 :(得分:4)
这样的东西会更容易理解IMO:
if( Math.random() >= probabilityOfDoingNothing ){
if( Math.random() < 0.6 ){
action1;
}else{
action2;
}
}
重新。关于案例的问题,以下内容相当于您的代码:
Random rand = new Random(50);
switch(rand.nextInt())
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
{
do action 1
}
break;
case 7:
case 8:
case 9:
case 10:
{
do action 2
}
break;
}
答案 1 :(得分:3)
Random rand = new Random(50);
int n = rand.nextInt(11);
if(n<=6)
do action 1
else
do action 2
您需要使用nextInt(n)
生成0(含)和n(不包括)之间的数字。在这种情况下,我们使用11,它给出了0到10之间的数字。任何低于6(60%几率)的事情我们采取行动1否则做行动2。
请参阅this for more details on the Random class.
使用switch语句仅在您要执行许多操作时才有用,执行的操作取决于某些操作。例如,基于当前月份执行不同的动作。它比编写if-else语句更快。
答案 2 :(得分:1)
如果您希望针对多种情况执行相同的操作,请不要放弃。例如
case 1:
case 2:
do action 1; break;
在这种情况下,案例1和案例2都会发生行动1。
答案 3 :(得分:0)
你所能做的就是不要像中间那样适用中断
case 1:
case 2:
case 3:
case 4:
case 5:
do action 1;
break
case 6:
case 7:
do action 2;
break
default : break;
或 如果你有值范围,请使用if-else ..
答案 4 :(得分:0)
“随机”行为有很多种方法。有些比其他更容易实现,但这些牺牲了熵桶。 Random()是一项昂贵的操作。 Switch对于复杂的信令非常有用,但对于二元决策来说,如果你想要的话:
int signal = (int)(System.currentTimeMillis() % 5);
if(signal==0 || signal == 1){
doActionTwo();//one third of the time
}else{
doActionOne();//two thirds of the time
}