在下面的代码中,有没有更好的方法来排除随机值?
enum Direction {HAUT, BAS, GAUCHE, DROITE} direction;
switch(direction)
{
case HAUT:
if (false)
{
do{direction=(rand() % 4); }while(direction!=0);
break;
}
case BAS:
if (false)
{
do{direction=(rand() % 4); }while(direction!=1);
break;
}
case GAUCHE:
..........
答案 0 :(得分:3)
看起来您的代码总是排除当前方向(向上排除0,向下排除1,依此类推),因此您可以使用Enum.ordinal
来决定排除而不是使用开关,如下所示:< / p>
Direction direction = GAUCHE; // ...for example...
int nextDir;
do {
nextDir = rand() % 4;
} while (nextDir == direction);
direction = nextDir;
答案 1 :(得分:2)
怎么样:
new_direction = rand() % 3;
direction = (new_direction < direction) ? new_direction : new_direction + 1;
如果我们生成的方向小于我们希望排除的数字,请保留它。否则增加1以跳过排除的数字。因此,随机数的范围减少了1。