如何在switch语句中使用大于或等于

Vla*_*iev 11 java if-statement switch-statement

使用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;

}
Run Code Online (Sandbox Code Playgroud)

你有什么能告诉新手在switch语句中使用"大于或等于"?

Ste*_*art 20

不确定这是不是你要问的,但你可以这样做:

int var1;
int var2;

int signum = Long.signum((long)var1 - var2);
switch(signum) {
    case -1: break;
    case 0: break;
    case 1: break;
}
Run Code Online (Sandbox Code Playgroud)

  • 这是非常短的代码,但我不确定这对每个人(包括我自己)是否容易阅读.我认为,如果代码很长一段时间内由很多人维护,那么使代码易于阅读更为重要. (5认同)
  • 由于存在数值溢出的风险,不推荐使用。找到错误可能需要几个小时。 (2认同)
  • Integer.MIN_VALUE和Integer.MAX_VALUE之间的距离是整数范围的两倍.因此,如果一个值非常大而另一个非常小,则距离不适合整数,并且发生溢出导致错误的符号. (2认同)
  • @Holger-好点。我将编辑使用`Long.signum()`来代替:-) (2认同)

Gui*_*ume 11

我强烈推荐一个if(var1>var2){}else if (var1==var2) {} else {}结构.在这里使用开关将隐藏意图.如果a break被错误删除怎么办?

切换对于枚举值很有用且清晰,而不是用于比较.


Nar*_*hai 6

首先提出一个建议:switch因为它只能用于切换而不能用于条件检查.

来自JLS switch语句

SwitchStatement:
    switch ( Expression ) SwitchBlock
Run Code Online (Sandbox Code Playgroud)

表达式支持表达式可转换为int或Enum的表达式.

这些标签被称为与switch语句相关联,case标签中的常量表达式(§15.28)或枚举常量(§8.9.1)的值也是如此.

只有常量表达式和枚举常量允许在1.4或更低版本的switch语句中使用java 7字符串值.不支持逻辑表达式.

或者你可以按照@Stewart的回答做.


Oli*_*ews 5

Java 仅支持直接值,而不支持case语句中的范围,因此如果必须使用开关,请先映射到选项,然后再打开它,就像您提供的示例中那样,这是您唯一的选择。然而,这是相当过分的——只使用 if 语句。


tal*_*gna 5

switch 语句用于在返回特定值时运行代码,if then else 允许您在一个语句中选择一系列值。如果您想查看多个范围,我建议您执行如下操作(尽管我个人更喜欢 Integer.signum 方法):

int i;

if (var1 > var2) {
  i = 1;
}
else if (var1 == var2) {
  i = 0;
}
else {
  i = -1;
}
Run Code Online (Sandbox Code Playgroud)


chr*_*ke- 5

你最好用这些if陈述;该switch方法不太明确,在这种情况下,您的switch方法客观上是错误的的合约Comparable#compareTo不需要返回-11,只需返回的值为int负数或正数即可。compareToreturn是完全合法的-42,你的switch语句会丢弃结果。