如何在java中的case语句中输入Double值

时间:2015-02-18 16:10:02

标签: java switch-statement double

我曾经在case语句中检查int值,但有没有办法检查double值?我不能使用If else。这是一项任务。谢谢。

3 个答案:

答案 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>