【问题标题】:Convert If/Else's into a switch somehow以某种方式将 If/Else 转换为开关
【发布时间】:2014-03-17 03:21:11
【问题描述】:

所以基本上我正在尝试做的是将这段代码以某种方式变成一个 switch 语句。我不确定该怎么做。我有几个想法,比如用具有一系列值的关键字制作一个枚举(即“枚举野兔 { ONE =(范围从 1-5)TWO =(范围从 6-8)} - 但我不知道那是否是一个错误:S

希望我已经清楚我要问的问题了。

int y = 1 + rand() % 10; 
    // determine which move to make
    if ( y == 1 || y == 2 ) {  
        hare += 0;
    } else if ( y == 3 || y == 4 ) {  
        hare += 9;
    } else if (y == 5) {
        hare -= 12;
    } else if (y >= 6 && y <= 8){
        hare += 1;
    } else if (y == 9 || y == 10){
        hare -= 2;
    }else {                         
        ++( hare );  
    }

    if ( hare < 1 ) {
        hare = 1;
    } else if ( hare > RACE_END ) {
        hare = RACE_END;
    }

【问题讨论】:

  • 要获得额外的学分,请学习新的 C++11 随机化引擎。

标签: c++ enums switch-statement


【解决方案1】:

第一个问题是进行转换是否有真正的价值。那么这种情况下的操作其实很简单,因为除了else之外的所有情况下都有少量的有效情况:

switch (y) {
case 1: case 2:
   break;
case 3: case 4:
   hare += 9;
   break;
case 5:
   hare -= 12;
   break;
case 6: case 7: case 8:
   hare += 1;
   break;
case 9: case 10:
   hare -= 2;
   break;
default:
  ++hare;
}

【讨论】:

    【解决方案2】:

    如果你想使用switch 语句,你可以这样做

    switch( y ){
        case 1:
        case 2: hare += 0; break;
        case 3:
        case 4: hare += 9; break;
        case 5: hare -= 12; break
        case 6:
        case 7:
        case 8: hare += 1; break;
        case 9:
        case 10: hare -= 2; break;
        default: ++(hare);
    }
    

    但是,使用enumenum hare { ONE =(range from 1-5) TWO = (range from 6-8)} 是......你试图在一个变量中存储多个值,这是不可能的。

    Reference 用于switch 声明

    【讨论】:

      【解决方案3】:

      您可以轻松地执行以下操作:

           switch(y)
          {
               case 1:
               case 2:
                   //do something
                    break;
      
               default:
                    //
          }
      

      因此,根据 y 的值满足您的案例条件。

      【讨论】:

        【解决方案4】:
        int y = 1 + rand() % 10; 
        
        switch ( y )
        {
        case 1:
        case 2:
            hare += 0;
            break;
        case 3:
        case 4:
            hare+= 9;
            break;
        case 5:
            hare -= 12;
            break;
        case 6:
        case 7:
        case 8:
            hare += 1;
            break;
        case 9:
        case 10:
            hare -= 2;
            break;
        default:
            ++hare;
            break;
        }
        
         if ( hare < 1 ) {
                hare = 1;
            } else if ( hare > RACE_END ) {
                hare = RACE_END;
         }
        

        【讨论】:

          【解决方案5】:

          你可以这样做。

          int y = 1 + rand() % 10; 
          switch(y)
          {
          
              case 1:         //1 or 2
              case 2:
                  hare += 0;
                  break;
              case 3:         //3 or 4
              case 4:
                  hare += 9;
                  break;
              case 5:
                  hare -= 12;
                  break;
              case 6:
              case 7:
              case 8:
                  hare += 1;
                  break;
              case 9:
              case 10:
                   hare -= 2;
                   break
              default:
                  if ( hare < 1 ) {
                      hare = 1;
                  } else if ( hare > RACE_END ) {
                      hare = RACE_END;
                  }
                  else
                      ++( hare );
                  break;
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-08-30
            • 1970-01-01
            • 1970-01-01
            • 2019-04-09
            • 2023-03-14
            • 2012-04-12
            • 2014-04-13
            • 2018-04-21
            相关资源
            最近更新 更多