以某种方式将 If/Else's 转换为开关

Convert If/Else's into a switch somehow

本文关键字:转换 开关 Else 方式 If      更新时间:2023-10-16

所以基本上我要做的就是把这段代码变成一个switch语句。我不知道该怎么做。我有几个想法,比如制作一个具有一系列值的关键字的enum(即"enum有{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;
    }

第一个问题是进行转换是否有真正的价值。那么对于这种情况,操作实际上很简单,因为除了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;
}

如果您想使用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);
}

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

switch语句参考

您可以轻松地这样做:

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

因此,根据y的值符合您的大小写条件。

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

您可以这样做。

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