23

使用 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 语句中使用“大于或等于”,你能告诉新手什么?

4

8 回答 8

23

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

int var1;
int var2;

int signum = Long.signum((long)var1 - var2);
switch(signum) {
    case -1: break;
    case 0: break;
    case 1: break;
}
于 2013-08-29T12:02:00.480 回答
12

我强烈推荐一个if(var1>var2){}else if (var1==var2) {} else {}构造。在此处使用开关将隐藏意图。如果 abreak被错误删除了怎么办?

Switch 对于枚举值有用且清晰,而不是用于比较。

于 2013-08-29T12:02:31.970 回答
9

首先是一个建议:switch因为它声明应该只用于切换而不是用于条件检查。

来自 JLS switch 语句

SwitchStatement:
    switch ( Expression ) SwitchBlock

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

这些标签被称为与 switch 语句相关联,与 case 标签中的常量表达式(第 15.28 节)或枚举常量(第 8.9.1 节)的值一样。

1.6 或更低版本的 switch 语句中只允许常量表达式和枚举常量,java 7 还支持字符串值。不支持逻辑表达式。

或者,您可以按照@Stewart 在他的回答中给出的那样做。

于 2013-08-29T12:04:05.077 回答
5

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

于 2013-08-29T12:02:15.593 回答
3

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

int i;

if (var1 > var2) {
  i = 1;
}
else if (var1 == var2) {
  i = 0;
}
else {
  i = -1;
}
于 2013-08-29T12:04:49.497 回答
3

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

于 2013-08-29T12:21:25.333 回答
0

如果使用一个变量的值,请使用 switch。如果有多个变量在起作用,请使用 if。在您陈述的问题中,应该是if

于 2013-08-29T12:04:23.007 回答
0

不幸的是,你不能在 java 中做到这一点。可以用CoffeeScript其他语言或其他语言。

我建议通过在额外的方法中移动“做事”来使用if--语句。else这样,您可以将 if-else 保存在清晰可读的代码中。

于 2013-08-29T12:05:48.043 回答