我需要为我可以使用的范围值实现switch语句,否则我认为switch的性能会更好。
我有一个要求,如果变量的值在1-150之间,我将处理我的逻辑。如果变量的值在150-300之间,那么其他一些逻辑和if范围是300-450然后是一些不同的逻辑等等。
所以我在这种情况下如何使用开关,因为我通常使用具有固定值的开关。 提前谢谢。
答案 0 :(得分:8)
我建议你使用公式
;
如果您使用switch (value / 150) {
case 0: // 0 - 149
break;
case 1: // 150 - 299
break;
case 2: // 300 - 449
break;
default: // otherwise.
}
,则会获得1-150,151-300,301-450等
编辑:由于整数除法的性质,case 0也将在switch((value-1)/ 150){...}中接受-148-0。为了避免这种情况,可以使用if / else语句以及条件运算符。
答案 1 :(得分:0)
这是不可能的。
如果您查看Java Language Specification for switch
,则会看到case
后的表达式必须是ConstantExpression
或EnumConstantName
。
这些都不是范围。
评论中指出了一些备选方案。您可以使用if
语句;除非你的案件数量非常多,否则在性能方面不应该有太大差异
或者您可以(根据this answer, linked in the comments by @tomas)创建单独的函数来区分不同的范围。
如果范围是常规的(例如101-200,201-300等),您也可以使用公式。小心舍入错误!测试公式的边缘情况以确保其正确。