Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,关于交换机和机箱的问题?_Java_Switch Statement - Fatal编程技术网

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

Java,关于交换机和机箱的问题?,java,switch-statement,Java,Switch Statement,所以我60%的时间想做某个动作,40%的时间想做另一个动作。有时两者都不起作用。我能想到的最好的方法是通过开关和制作一堆箱子。下面是一个例子,如果这对你来说没有任何意义。 我的问题是,有没有更好的办法? 有没有一种方法可以在一个语句中只执行案例0-5操作1 Random rand = new Random(50); switch(rand.nextInt()) { case 1: { do

所以我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;  
        }
您需要使用nextIntn生成一个介于0(包含)和n(独占)之间的数字。在本例中,我们使用11,它给出了一个介于0和10之间的数字。如果低于6,我们有60%的机会执行行动1,否则执行行动2


使用switch语句仅在您有许多要执行的操作时有用,其中执行的操作取决于某些内容。例如,根据当前月份执行不同的操作。它比编写if-else语句要快。

在我看来,这样的语句更容易阅读:

if( Math.random() >= probabilityOfDoingNothing ){

    if( Math.random() < 0.6 ){
        action1;
    }else{
        action2;
    }
}

你所能做的就是不要像这样在中间应用中断


如果有值的范围,请使用if-else。

有许多方法可以处理随机行为。有些比其他更容易实现,但这些牺牲了熵桶。随机操作是一项昂贵的操作。开关对于复杂的信令非常有用,但对于二进制决策,如果您想要:

int signal = (int)(System.currentTimeMillis() % 5);
if(signal==0 || signal == 1){
 doActionTwo();//one third of the time
}else{
 doActionOne();//two thirds of the time
}

如果你想在多个情况下发生相同的动作,那么就不要中断。比如说

case 1:
case 2:
do action 1; break;

在这种情况下,操作1将同时发生在操作1和操作2上。

因此,基本上操作1比操作2更频繁地被调用,有时两个操作都不会被调用。关于哪个实现的真正问题归结为您使用它的目的以及准确性对您的程序有多重要。如果高精度的准确性和随机性很重要,还有其他方法。6:5很难算是60:40的比例;应该是:int n=rand.nextInt10;否则,您将处理11个值,而不是10个值。
case 1:
case 2:
case 3:
case 4:
case 5:
do action 1;
break
case 6:
case 7:
do action 2;
break
default : break;
int signal = (int)(System.currentTimeMillis() % 5);
if(signal==0 || signal == 1){
 doActionTwo();//one third of the time
}else{
 doActionOne();//two thirds of the time
}
case 1:
case 2:
do action 1; break;