说我有3个案例我希望它们被执行,但并非总是如此。
E.g。
Case 1 --> happens always
Case 2 --> happens 20% of times
Case 3 --> happens 60% of times
我该如何编程呢?这是我到目前为止的想法:
x = nextInt(100);
execute case 1
if( x <= 20 ){
execute case 2
}
if ( x <= 60 ){
execute case 3
}
这个问题有不同的方法吗?也许有些我不知道的功能? java随机文档似乎没有这方面的东西。
答案 0 :(得分:4)
您可以使用apache的库数学。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
可能有点矫枉过正
List<Pair<Boolean,Double>> list = new ArrayList<Pair<Boolean,Double>>();
list.add(new ImmutablePair(true, 0.2));
list.add(new ImmutablePair(false, 0.8));
EnumeratedDistribution e = new EnumeratedDistribution(list);
//execute case 1
if (e.sample()) {
//execute case 2
}
...
但如果你的逻辑改变,你可以这样:
List<Pair<String,Double>> list = new ArrayList<Pair<String,Double>>();
list.add(new ImmutablePair("name_1", 0.2));
list.add(new ImmutablePair("name_2", 0.4));
list.add(new ImmutablePair("name_3", 0.4));
EnumeratedDistribution e = new EnumeratedDistribution(list);
switch(e.sample()) {
case "name_1" :
...
break;
case "name_2" :
...
break;
case "name_3" :
...
break;
}
只执行一个案例,每个案例的执行概率不同。它非常灵活。