1

次のコードで、 random の値を除外するより良い方法はありますか?

    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 に答える