我需要检测我需要显示的哪个词与用户得分相对应。
我有下一个开关:
switch (score) {
case 0:
outString = @"String1";
break;
case 1:
outString = @"String2";
break;
case 2:
outString = @"String3";
break;
case 3:
outString = @"String3";
break;
case 4:
outString = @"String3";
break;
case 5:
outString = @"String1";
break;
case 6:
outString = @"String1";
break;
case 7:
outString = @"String1";
break;
case 8:
outString = @"String1";
break;
case 9:
outString = @"String1";
break;
default:
break;
}
但是,当得分为29或109时,我如何使用相同的开关。所以我需要在第一种情况下修剪20得到9而在第二种情况下我需要修剪100得到9。
之前我使用过这个算法,但我忘了怎么做:(
所以接下来的目标是 - 我每次只需要0到9之间的数字而没有十分之几千分之一的数字。
答案 0 :(得分:4)
如果你的单词总是取决于数字的最后一位,你只需在开关条件下使用它(使用模数运算符):
switch (score % 10)
...
如果只有29和129是特殊情况,那么您可以对同一个案例使用多个标签:
case 9:
case 29:
case 109:
outString = @"String1";
break;
答案 1 :(得分:2)
比使用巨型switch
语句好多了,就是使用查找表:
std::string score_string(unsigned int score)
{
static const std::string strings = {"String1","String2","String3",...};
static const int strings_count = 10; //10 strings in the lookup table, for example.
return strings[score % strings_count];
}