我生成了简单的随机数,我想根据生成的值执行不同的操作。我有9个不同的动作。我无法在switch
值上使用double
结构,我无法从double
投射到int
以使用switch
因此我注定要使用{ {1}}结构?
if
编辑:请注意我的行为不是等概率的
答案 0 :(得分:2)
创建一个static TreeMap<Double,Integer>
,其间隔限制映射到整数“案例标签”。使用higerEntry
方法获取与您随机生成的double
最近的值的条目,并使用switch
语句中的结果值。
static final TreeMap<Double,Integer> limits = new TreeMap<Double,Integer>();
static {
limits.put(1.0, 0);
limits.put(3.5, 1);
limits.put(8.0, 2);
limits.put(10.3, 3);
}
此地图设置了五个间隔:
现在,您可以在代码中执行此操作:
double someNumber = ... // Obtain a random double
Map<Double,Integer> entry = higerEntry(someNumber);
switch (entry.getValue()) {
case 0: ... break;
case 1: ... break;
case 2: ... break;
case 3: ... break;
default: ... break;
}
答案 1 :(得分:1)
在这里,一些代码:
switch ((int) (rand * 10)) {
case 0:
case 1:
case 2:
case 3:
System.out.println("Between 0 and 3");
break;
case 4:
System.out.println("4");
break;
case 5:
System.out.println("5");
break;
case 6:
System.out.println("6");
break;
default:
System.out.println("More then 6");
break;
}
答案 2 :(得分:0)
如果操作是等概率的,您可以使用Random.nextInt()
上限和switch
:
Random rand = new Random();
...
switch (rand.nextInt(10)) {
case 0: ...; break;
case 1: ...; break;
case 9: ...; break;
}
您可以使用与[0, 1)
浮点随机数相同的技术。只需将其乘以10
并投放到int
。
答案 3 :(得分:0)
好的,感谢您的回答和@dasblinkenlight,我找到了解决问题的自定义解决方案:
static final Map<Integer, Double> cases = new HashMap<Integer, Double>(9);
static{
cases.put(1, 30.0);
cases.put(2, 55.0);
cases.put(3, 70.0);
cases.put(4, 80.0);
cases.put(5, 84.0);
cases.put(6, 88.0);
cases.put(7, 92.0);
cases.put(8, 96.0);
cases.put(9, 100.0);
}
switch (getIntFromDouble(Math.random()*100)) {
case 0 : ...
break;
case 1 : ...
break;
...
case 9 : ...
break;
}
private int getIntFromDouble(double rand){
for(Map.Entry<Integer, Double> entry : cases.entrySet()){
if(rand <= entry.getValue())
return entry.getKey();
}
return Integer.MAX_VALUE;
}
答案 4 :(得分:-1)
你不能使用四舍五入吗?
int value=Math.round(yourDouble)