Java,关于交换机和案例的问题?

时间:2011-07-17 19:45:41

标签: java switch-statement

因此,我希望在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;  
        }

5 个答案:

答案 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
}