2016-10-10 103 views
-4

我需要为范围值实现switch语句我可以使用if else,但我认为switch的性能会更好。我需要在java中使用switch语句来获取范围值

我有要求,如果变量的值在1-150之间的范围我会处理我的逻辑。如果变量的值在150-300之间的范围内,那么其他一些逻辑,如果范围在300-450之间,那么一些不同的逻辑等等。

所以我如何在这种情况下使用开关,因为通常我使用开关的固定值。 在此先感谢。

+2

告诉我们你先试了一下。 “_I可以使用,但我认为开关的性能会更好。”不要担心这种简单例子的“性能”。首先担心让程序运行。 –

+3

您可以执行一些算术将每种情况转换为特定的常量。但是,你可能会更好地使用if语句。 'switch'语句不适用于范围。 – khelwood

+8

应该回答你的问题:http://stackoverflow.com/questions/10873590/in-java-using-switch-statement-with-a-range-of-value-in-each-case – tomas

回答

8

我建议你使用一个公式

switch (value/150) { 
    case 0: // 0 - 149 
      break; 
    case 1: // 150 - 299 
      break; 
    case 2: // 300 - 449 
      break; 
    default: // otherwise. 
} 

如果使用(value-1)/150你1-150,151-300,301-450等

编辑:0的情况下也将接受-148 - 0由于整数除法的性质,在开关((值-1)/ 150){...}中。为避免这种情况,可以使用if/else语句以及条件运算符。

+1

非常新颖的答案 –

+2

@AmberBeriwal欢呼,如果你除以50例如,你可以有不同的大小范围,没有太多的复杂性。 –

0

这是不可能的。

如果您检查Java Language Specification for switch,您会发现case之后的表达式必须是ConstantExpressionEnumConstantName
这些都不是一个范围。

评论中指出了一些替代方案。您可以使用if声明;除非你有大量的案例,否则它不应该在性能上有很大的不同。
或者你可以(根据this answer, linked in the comments by @tomas)创建单独的函数来区分不同的范围。

如果范围是常规的(例如101-200,201-300等),您也可以使用公式。谨防舍入错误!测试公式的边缘情况以确保它是正确的。