没有变量的开关盒

时间:2012-12-02 15:13:16

标签: java switch-statement case

是否可以在不指定开关变量的情况下编写开关案例代码?说我有两个变量int x和int y。我想根据x和y的不同组合有条件地运行代码。例如

switch
{
    case (x==1 && y==1): //do something.
        break;
    case (x==3 && y==-1): //do something.
        break;
    case (x==0 && y==3): //do something.
        break;
    default: //do something.
        break;
}

此代码给我错误。

7 个答案:

答案 0 :(得分:3)

您可以更好地使用if-else解决问题

答案 1 :(得分:2)

这并不比

更好地读写
if (x==1 && y==1) {
    //do something.
}
else if (x==3 && y==-1) {
    //do something.
}
else if (x==0 && y==3) {
    //do something.
}
else {
    //do something.
}

但是,切换案例是不可能的。

答案 2 :(得分:1)

在切换案例中,您不能使用==仅使用值。对于您的情况,请使用if else。

答案 3 :(得分:1)

明显的方式是使用else if

if (x==1 && y==1) {
    //do something.
}
else if (x==3 && y==-1) {
    //do something.
}
else if (x==0 && y==3) {
    //do something.
}
else {
   // do something as default case.
}

一种变体是使用单独的方法

好处是您可以使用return

if (x==1 && y==1) {
    //do something.
    return;
}
// precompute something...
if (x==3 && y==-1) {
    //do something.
    return;
}
if (x==0 && y==3) {
    //do something.
    return;
}
// do something as default case.
return;

但除非你有嵌套else分支,否则它没有太大的区别。

但是 case实际上比if else 带来好处的一个案例就是当您有完整的案例枚举时。它避免了编程错误然后:

switch(direction) {
  case NORTH: // Do something
    break;
  case SOUTH: // Do something
    break;
  case EAST: // Do something
    break;
  case WEST: // Do something
    break;
}

好处是编译器实际上可以检查您是否需要default分支。

除非您有完整枚举,否则if同样出色。

答案 4 :(得分:0)

switch的重点是基于单个变量的值来做某事,而且,只测试相等性。在您的情况下,您可以使用一系列else-if s。

if (x==1 && y==1) {
    // do something
} else if (x==3 && y==-1) {
    // do something
} else if (x==0 && y==3) {
    // do something
} else {
    // do something (default)
}

答案 5 :(得分:0)

Hwre是switch case的语法

switch ( expression ) statement
labeled-statement:
case constant-expression : statement
default : statement

清楚地表明你必须通过 表达式开关(exp)
所以你不能离开它。

答案 6 :(得分:0)

将开关参数保留为真

switch(true)
{
    case (x==1 && y==1): //do something.
        break;
    case (x==3 && y==-1): //do something.
        break;
    case (x==0 && y==3): //do something.
        break;
    default: //do something.
        break;
}