假设我有 3 个案例,我希望它们被执行,但并非总是如此。
例如
Case 1 --> happens always
Case 2 --> happens 20% of times
Case 3 --> happens 60% of times
Run Code Online (Sandbox Code Playgroud)
我该如何编写这个程序?到目前为止我的想法是:
x = nextInt(100);
execute case 1
if( x <= 20 ){
execute case 2
}
if ( x <= 60 ){
execute case 3
}
Run Code Online (Sandbox Code Playgroud)
对于这个问题有不同的方法吗?也许有一些我不知道的功能?java random文档似乎没有这方面的内容。
您可以使用 apache 的数学库。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
也许有点矫枉过正
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
}
...
Run Code Online (Sandbox Code Playgroud)
但如果你的逻辑改变,你可以有这样的事情:
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;
}
Run Code Online (Sandbox Code Playgroud)
只执行一种情况,每种情况都有不同的执行概率。它非常灵活。