1

在下面的代码中,有没有更好的方法来排除随机值?

    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:
..........
4

2 回答 2

3

看起来您的代码总是排除当前方向(向上排除 0,向下排除 1,依此类推),因此您可以使用Enum.ordinal来决定排除而不是使用开关,如下所示:

Direction direction = GAUCHE; // ...for example...
int nextDir;
do {
    nextDir = rand() % 4;
} while (nextDir == direction);
direction = nextDir;
于 2012-05-10T00:21:47.637 回答
2

关于什么:

new_direction = rand() % 3;
direction = (new_direction < direction) ? new_direction : new_direction + 1;

如果我们生成的方向小于我们希望排除的数字,请保留它。否则增加 1 以跳过排除的数字。随机数的范围相应地减少了 1。

于 2012-05-10T00:26:54.440 回答