【问题标题】:switch case without variable不带变量的开关盒
【发布时间】:2012-12-02 15:13:15
【问题描述】:

是否可以在不指定 switch 变量的情况下编写 switch 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;
}

这段代码给了我错误。

【问题讨论】:

  • 如果我支持这样的代码,我会诅咒你:)

标签: java switch-statement case


【解决方案1】:

保持开关参数为真

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;
}

【讨论】:

  • 这是真正解决问题的唯一答案。其他答案表明 switch case 不可能。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这并没有真正比阅读或写作更好

    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.
    }
    

    但是,是的,使用 switch case 是不可能的。

    【讨论】:

    【解决方案4】:

    明显的方式是使用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 也一样好。

    【讨论】:

      【解决方案5】:

      在 switch 情况下,您不能使用 == 仅使用值。根据您的情况使用 if else。

      【讨论】:

        【解决方案6】:

        switch 的全部意义在于根据 single 变量的值做一些事情,此外,只测试相等性。在您的情况下,您可以使用一系列else-ifs。

        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)
        }
        

        【讨论】:

          【解决方案7】:

          Hwre 是 switch case 的语法

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-09-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多