以某种方式将 If/Else's 转换为开关
Convert If/Else's into a switch somehow
所以基本上我要做的就是把这段代码变成一个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;
}
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- C++实用程序,用于将长开关语句转换为封装开关案例阶梯的简洁函数调用
- C++:如果用户输入数字将其转换为单词,并且如果按回车键程序应退出,则使用开关大小写
- 状态机:使用转换矩阵而不是嵌套的开关案例C++
- C++ -- 如何使用开关语句和恒量获得有效的货币转换器
- 代码在嵌套开关中选择的每个情况和错误C4244在c++中从double转换为float后停止/结束
- 超级简单的货币转换开关行为奇怪
- 开关条件中从类到枚举类型的隐式转换
- 内部编译器错误-开关表达式中的模板化转换操作符
- 任何不把大开关块转换成二叉树的编译器
- 如何在开关语句中更改指针。错误:从'const char*'到'char'的转换无效
- 根据"foreign"子类型采取特定操作,不带开关、强制转换等。我们可以以某种方式使用多态性吗?
- 以某种方式将 If/Else's 转换为开关
- 编译器开关在c风格的强制转换中禁用const_cast语义