2

重複の可能性:
C# の乱数ジェネレーター - 一意の値

乱数を生成する C# プログラムを作成しようとしています。この数値が配列内にあるかどうかを確認し、そうであれば、数値の生成を繰り返します。そうでない場合は、この数値を[i]配列のスロットに挿入します。

これまでの私のコードは次のとおりです。

        int check = 0;


        Random rand = new Random();

        int[] lotto = new int[6];



        for (int i = 0; i < lotto.Length; )
        {
            check = rand.Next(1, 41);
            while (!(lotto.Contains(check)))
            {

                lotto[i] = check;
                i++;
            }

            Console.WriteLine("slot " + i + " contains " + check);

        }
        Console.Read();
    }

更新:ありがとうございます。if を while に置き換えました:)

4

3 に答える 3

1

あなたの質問は何が機能していないかだと思います.1つ忘れ!て宣言されていない変数を使用したと思いますi:

if (!lotto.Contains(check)) // Ensure the number has not been chosen
{
    lotto[count] = check; // Set the number to its correct place
    count=count+1
}
于 2012-09-06T06:43:31.287 に答える
0

あなたはこれを試すことができます:

for (int i = 0; i < lotto.Length;) 
{
  check = rand.Next(1, 41);
  Console.WriteLine("Random number to be checked is -> "+check);

  if (!lotto.Contains(check))
  {
     lotto[i] = check;
     i++;
  }

  Console.WriteLine("slot " + i + " contains " + check);
}

forステートメントからi++を削除し、ifブロック内に配置したことに注意してください。

他のループ構造でもこれを試すことができますが、これはコードの編集を最小限に抑えるためです。

編集:

さて、私はコードを試しましたが、私のために働いているようです。完全なコードは次のとおりです。

int check = 0;

int[] lotto = new int[6];

Random rand = new Random();

for (int i = 0; i < lotto.Length; )
{
    check = rand.Next(1, 41);
    Console.WriteLine("Random number to be checked is -> " + check);

    if (!lotto.Contains(check))
    {
        lotto[i] = check;
        i++;
    }

    Console.WriteLine("slot " + i + " contains " + check);
}

Console.ReadKey();

while構成を使用することもできます。

int check = 0;

int[] lotto = new int[6];

Random rand = new Random();

int i = 0;

while (i < lotto.Length)
{
    check = rand.Next(1, 41);
    Console.WriteLine("Random number to be checked is -> " + check);

    if (!lotto.Contains(check))
    {
        lotto[i] = check;
        i++;
    }

    Console.WriteLine("slot " + i + " contains " + check);
}

Console.ReadKey();

基本的に、これは前のコードと同じ機能です。

于 2012-09-06T06:49:33.323 に答える
0

繰り返しのない乱数を生成する場合は、FIPS 140-2 で検証された乱数ジェネレーターを使用します ( http://www.hhs.gov/ocr/privacy/hipaa/administrative/securityrule/の 36 ページのセクション 4.9.3 を参照)。 fips1402.pdf )。

これが重大なゲームの目的で使用されている場合、変数の命名が示唆するように、よりランダム性が高いものをお勧めしますRandom

于 2012-09-06T06:52:15.450 に答える