如何在 switch 语句中使用大于或等于
Posted
技术标签:
【中文标题】如何在 switch 语句中使用大于或等于【英文标题】:How to use greater than or equal in a switch statement 【发布时间】:2013-09-01 20:27:24 【问题描述】:使用 switch 语句检查变量是否大于某个数字的最佳方法是什么?或者您建议使用 if-else?我找到了这样一个例子:
int i;
if(var1>var2) i = 1;
if(var1=var2 i = 0;
if(var1<var2) i = -1;
switch (i);
case -1:
do stuff;
break;
case 0:
do stuff;
break;
case 1:
do stuff;
break;
关于在 switch 语句中使用“大于或等于”,你能告诉新手什么?
【问题讨论】:
我会说用 3if
会更清楚
你最好使用 if-else
如果你已经有了 if 语句,我不明白为什么还要使用 switch 语句。只需使用 if 语句即可,因为逻辑已经存在
【参考方案1】:
不确定这是否是您的要求,但您可以这样做:
int var1;
int var2;
int signum = Long.signum((long)var1 - var2);
switch(signum)
case -1: break;
case 0: break;
case 1: break;
【讨论】:
这是非常短的代码,但我不确定这是否适合所有人(包括我自己)阅读。我认为如果该代码将由许多人长期维护,那么拥有易于阅读的代码更为重要。 +1 用于使用 switch,我已经更新了我的答案。感谢您指出这一点。 不推荐,因为存在数值溢出的风险。可能需要几个小时才能找到错误。 Integer.MIN_VALUE 和 Integer.MAX_VALUE 之间的距离是整数范围的两倍。因此,如果一个值非常大而另一个值非常小,则距离不适合整数,并且会发生溢出,导致符号错误。 @Holger - 好点。我将编辑为使用Long.signum()
:-)【参考方案2】:
我强烈推荐if(var1>var2)else if (var1==var2) else
构造。在此处使用开关将隐藏意图。如果break
被错误删除了怎么办?
Switch 对于枚举值有用且清晰,而不是用于比较。
【讨论】:
【参考方案3】:首先是一个建议:switch
,因为它声明应该只用于切换而不是用于条件检查。
From JLS switch statements
SwitchStatement:
switch ( Expression ) SwitchBlock
表达式支持可转换为 int 或 Enum 的表达式。
这些标签被称为与 switch 语句相关联,如 是常量表达式(§15.28)或枚举常量的值 (§8.9.1) 在案例标签中。
在 1.6 或更低版本的 switch 语句中只允许常量表达式和枚举常量,java 7 还支持字符串值。不支持逻辑表达式。
或者你可以按照@Stewart 在他的回答中给出的那样做。
【讨论】:
如果var1 == 6
和var2 == 4
,则var1 - var2 == 2
不在您的switch
中。根据我 5 分钟前的回答,您需要使用 Integer.signum()
。 :)
而且使用 signum 它仍然被破坏,因为差异可能高于整数范围,从而导致溢出和错误结果。【参考方案4】:
Java 仅支持直接值,而不支持 case
语句中的范围,因此如果您必须使用开关,请先映射到选项,然后再打开它,如您提供的示例中所示,这是您唯一的选择。但是,这太过分了 - 只需使用 if 语句即可。
【讨论】:
基本正确。但是在某些情况下(不是 OP 的情况),可以使用默认选项来有效地支持范围。【参考方案5】:您最好使用if
语句; switch
方法不太清楚,在这种情况下,您的 switch
方法在客观上是错误的。 The contract for Comparable#compareTo
不需要返回-1
或1
,只需返回int
的值为负或正。 compareTo
返回-42
是完全合法的,而您的switch
语句会丢弃结果。
【讨论】:
【参考方案6】:switch 语句用于在返回特定值时运行代码,if then else 允许您在一个语句中选择一系列值。如果您想查看多个范围,我建议您执行以下操作(尽管我个人更喜欢 Integer.signum 方法):
int i;
if (var1 > var2)
i = 1;
else if (var1 == var2)
i = 0;
else
i = -1;
【讨论】:
【参考方案7】:如果使用一个变量的值,请使用switch。如果有多个变量在起作用,请使用 if。在您陈述的问题中,它应该是 if。
【讨论】:
【参考方案8】:不幸的是,你不能在 java 中做到这一点。可以使用CoffeeScript
或其他语言。
我建议使用if
-else
-statement,通过额外的方法移动你的“做事”。通过这种方式,您可以将 if-else 保存在清晰可读的代码中。
【讨论】:
以上是关于如何在 switch 语句中使用大于或等于的主要内容,如果未能解决你的问题,请参考以下文章