我曾经在case语句中检查int值,但有没有办法检查double值?我不能使用If else。这是一项任务。谢谢。
答案 0 :(得分:0)
// don't do this, unless you want readability not performance.
switch(Double.toString(d)) {
case "1.0":
break;
case "Infinity":
break;
}
相反,您应该使用一系列if / else语句或使用Map<Double, DoubleConsumer>
作为一长串双打。
您可以使用NavigableMap进行有效的范围搜索。
NavigableMap<Double, DoubleConsumer> map = new TreeMap<>();
// default value is an assertion error
map.put(Double.NEGATIVE_INFINITY, d -> new AssertionError(d));
double upperBound = 12345;
map.put(upperBound, d -> new AssertionError(d));
// if >= 1.0 then println
map.put(1.0, System.out::println);
public static void select(NavigableMap<Double, DoubleConsumer> map, double d) {
Map.Entry<Double, DoubleConsumer> entry = map.floorEntry(d);
entry.getValue().accept(d);
}
答案 1 :(得分:0)
切换案例只需要byte,short,char和int。还有一些其他特殊情况。 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
答案 2 :(得分:0)
由于double
值仅提供精确表示,因为值可以表示为彼此“足够接近”(在尾数长度内)的2的幂的总和,并且因为{ {1}}仅适用于完全匹配,在一般情况下,您无法在交换机中使用switch
。
它的基本原因与使用double
比较==
时需要小心相同。解决方案也是一样的:您应该使用一系列double
- if
- then
语句来查找所需的值
else
或使用if (a <= 0.2) {
...
} else if (a < 0.5) {
...
} else if (a < 0.9) {
...
} else {
...
}
并执行限制搜索:
TreeMap<Double,Something>