-3

返された最後の5つの異なる数値とは異なる乱数を返すRandom関数を作成しようとしています。

私がExcelVBAで使用する非常に類似したコード:

    Function Rand(ByVal Low As Long, ByVal High As Long) As Long
Randomize
    Num3 = Num2
    Num2 = Num1
  Rand = Int((High - Low + 1) * Rnd) + Low
  Num1 = Rand

 Do While Num1 = Num2 Or Num1 = Num3 Or Sheets(Csheet).Cells(Num1, 3) > 20

      Rand = Int((High - Low + 1) * Rnd) + Low
     Num1 = Rand
  Loop
End Function

番号は、heb[i].Knownの単語がfalseであることも確認する必要があります。私はこれを試しました:

private int Rand(int Min, int Max)
        {
            int i;
            int x = 0;
            Random rnd = new Random();
            oldNum[3] = oldNum[2];
            oldNum[2] = oldNum[1];
            oldNum[1] = oldNum[0];
            do
            {

                i = rnd.Next(Min, Max);
                x++;
            }
            while (Heb[i].Known==false && x<10000 && oldNum.Contains(i));
            oldNum[0] = i;
            return i;

        }

それにもかかわらず、それはあまりうまく協力していないようです...それは毎回0を返します。

最小値と最大値は、ランダム化するリスト内の範囲です(1〜30の間である必要があります)。Hebは、リスト内のアイテム数(約500〜1000アイテム)です。oldNumを次のように初期化します。

  int[] oldNum = new int[3];
4

1 に答える 1

1

必要なようですねQueue

Random rng = new Random();
Queue<int> queue = new Queue<int>();

private int Rand(int min, int max)
{
    int r;

    while(queue.Contains(r = rng.Next(min, max)));

    queue.Enqueue(r);

    if(queue.Count > 5) queue.Dequeue();

    return r;
}
于 2012-04-28T15:57:07.583 に答える