1. ホーム
  2. c#

[解決済み】ランダム文字列ジェネレータが同じ文字列を返す [重複]問題]

2022-04-05 18:18:32

質問

ランダム文字列ジェネレータを開発したのですが、なかなか思ったように動いてくれません。 私の目標は、これを2回実行し、2つの異なる4文字のランダム文字列を生成できるようにすることです。 しかし、1つの4文字のランダムな文字列が2回生成されるだけです。

以下は、そのコードと出力例です。

private string RandomString(int size)
{
    StringBuilder builder = new StringBuilder();
    Random random = new Random();
    char ch;
    for (int i = 0; i < size; i++)
    {
        ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));                 
        builder.Append(ch);
    }

    return builder.ToString();
}

// get 1st random string 
string Rand1 = RandomString(4);

// get 2nd random string 
string Rand2 = RandomString(4);

// create full rand string
string docNum = Rand1 + "-" + Rand2;

...そして、出力はこのようになります。 UNTE-UNTE ...しかし、次のように見えるはずです。 UNTE-FWNU

どうすれば、はっきりとしたランダムな2つの文字列を確保できるのでしょうか?

どのように解決するのですか?

メソッド内でRandomのインスタンスを作っているため、連続して呼び出されると同じ値を返してしまうのです。私ならこんな風にします。

private static Random random = new Random((int)DateTime.Now.Ticks);//thanks to McAden
private string RandomString(int size)
    {
        StringBuilder builder = new StringBuilder();
        char ch;
        for (int i = 0; i < size; i++)
        {
            ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));                 
            builder.Append(ch);
        }

        return builder.ToString();
    }

// get 1st random string 
string Rand1 = RandomString(4);

// get 2nd random string 
string Rand2 = RandomString(4);

// creat full rand string
string docNum = Rand1 + "-" + Rand2;

(あなたのコードの修正版)