生成0到4之间的数字并排除一个数字

时间:2012-05-10 00:13:13

标签: c

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

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

2 个答案:

答案 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。