0

以下のコードは論文からコピーされたもので、学部生の作品はウィキペディアのページからリンクされています。論文とコードにいくつかの欠陥を見つけたと思いますが、C# の経験がないので、再確認したいと思います。

私の理解では、このコードは大きな疑似完全乱数を作成することを意図していましたが、代わりに、小さな乱数が繰り返される大きな数を作成すると思います。すなわち。123784675 ではなく 123123123 です。誰かコードの動作を確認してください。

私がここで読んだことhttp://csharpindepth.com/Articles/Chapter12/Random.aspxとさまざまな投稿の Stackoverflow は、同じシードを使用しているため、反復ごとに同じ番号を取得し、その同じ番号を何度も追加していると信じさせます以上。

Random randomNumber = new Random();
counter = 0;

for (int j = 0; j < 1; j++)
{
    StringBuilder largeRandomNumber = new StringBuilder();
    for (int i = 0; i < 40000; i++)
    { 
        int value = randomNumber.Next(11111, 99999);
        largeRandomNumber.Append(value); 
    }
}
4

5 に答える 5

1

正しいです。はい、シードは同じですが、この行により、実行ごとに異なる番号が取得されるようになります。

int value = randomNumber.Next(11111, 99999);

この数値を文字列に追加して大きな乱数を作成しているため、これは本来の動作を行います。

于 2013-10-21T22:57:23.243 に答える
1

コードは問題ありません。

ここで試してみてください: http://www.compileonline.com/compile_csharp_online.php

using System.IO;
using System;
using System.Text;

class Program
{
    static void Main()
    {
       Random randomNumber = new Random();

       for (int j = 0; j < 1; j++)
       {
           StringBuilder largeRandomNumber = new StringBuilder();    

           for (int i = 0; i < 40; i++)
           { 
               int value = randomNumber.Next(11111, 99999);
               Console.WriteLine(value); 
            }
        }
    }
}
于 2013-10-21T22:55:00.267 に答える
0

はい、Random は現在の時刻でシードされるため、連続してすばやく呼び出された場合、同じ数値が生成される可能性が最も高くなります。ただし、ループ内でインスタンスをインスタンス化しない限りrandomNumber、例としては問題なく動作します。

たとえば、コードが次のような関数にプラグインされている場合

    public string GetLargeRandomNumber()
    {
        Random randomNumber = new Random();
        StringBuilder largeRandomNumber = new StringBuilder();

        for (int j = 0; j < 1; j++)
        {
            for (int i = 0; i < 40000; i++)
            {
                int value = randomNumber.Next(11111, 99999);
                largeRandomNumber.Append(value);
            }
        }
        return largeRandomNumber.ToString();
    }

メイン関数から立て続けに呼び出されると、同じ乱数が返されます。

于 2013-10-21T22:52:05.030 に答える
0

randomNumber構築時にシードされます。randomNumber.Next初期シードに基づいて、指定された 2 つの整数の間の次のランダムな整数を返し、再シードされないため、40000 個の新しい乱数が与えられ、それらが追加されます。

外側のループが何のためにあるのかわからない、とにかく一度しか実行されない

于 2013-10-21T22:52:29.660 に答える