2

次の形式でランダムな文字列を返すメソッドが必要です。

レター番号 レター番号 レター番号

4

5 に答える 5

11

スレッドセーフにする必要がない場合:

private static readonly Random rng = new Random();

private static RandomChar(string domain)
{
    int selection = rng.Next(domain.Length);
    return domain[selection];
}

private static char RandomDigit()
{
    return RandomChar("0123456789");
}

private static char RandomLetter()
{
    return RandomChar("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
}

public static char RandomStringInSpecialFormat()
{
    char[] text = new char[6];
    char[0] = RandomLetter();
    char[1] = RandomDigit();
    char[2] = RandomLetter();
    char[3] = RandomDigit();
    char[4] = RandomLetter();
    char[5] = RandomDigit();
    return new string(text);
}

(RandomStringInSpecialFormat で 3 反復ループを使用することもできますが、あまりメリットはありません。)

スレッドセーフにする必要がある場合は、同時に複数のスレッドから Random にアクセスしないようにする何らかの方法が必要になります。(私の見解では)これを行う最も簡単な方法は、MiscUtilからStaticRandomを使用することです。

于 2008-11-21T14:40:14.130 に答える
2

必要なメソッドは 2 つだけです。

1)文字をランダムにします(ASCIIを使用して、文字にキャストするよりも数値をランダムにすることができます)

2) 乱数。

どちらも次のユーティリティ メソッドを使用できます。

private int RandomNumber(int min, int max)
{
    Random random = new Random();
    return random.Next(min, max); 
}

電話する必要がある手紙と電話RandomNumber(65,90);する番号の場合:RandomNumber(1,9);連結するだけです。

これらのメソッドを呼び出して文字列を作成するよりも、これがお役に立てば幸いです。

アップデート

クラスにランダムオブジェクトを配置する必要があります...それは、その方法を示すためだけでした。まだ少し作業が必要ですが、ASCII から char を操作する方法を示すのは良いスタートだと思います。

于 2008-11-21T14:39:58.483 に答える
2
    public static string RandomString(Random rand, int length)
    {
        char[] str = new char[length];
        for (int i = 0; i < length; i++)
        {
            if (i % 2 == 0)
            {    //letters
                str[i] = (char)rand.Next(65, 90);
            }
            else
            {
                //numbers 
                str[i] = (char)rand.Next(48, 57);
            }
        }
        return new string(str);
    }

多分これはもっと読みやすいでしょう...

if (i % 2 == 0)
{    
      //letters
      str[i] = (char)rand.Next('A', 'Z');
}
else
{
   //numbers
    str[i] = (char)rand.Next('0', '9');
}
于 2008-11-21T14:49:57.763 に答える
1

IFなしの短いバージョン

class Program
{
    static void Main(string[] args)
    {
        Random r = new Random();
        for(int i = 0;i<25;i++)
        Console.WriteLine(RandomString(r,6));
        Console.Read();
    }

    public static string RandomString(Random rand, int length)
    {
        char[] str = new char[length];
        for (int i = 0; i < length; i++)
            str[i] = (char)rand.Next(65 - (17 * (i % 2)), 91-(33 * (i % 2)));
        return new string(str);
    }
}
于 2008-11-21T15:08:10.067 に答える
0

次に、Random.NextBytes 関数を Encoding.ASCII.GetString() と一緒に使用して、文字を生成します。

または、代わりに、文字列または文字配列 (string[]) を生成し、Random.Next(0,array.Length) を使用してインデックスを取得します。

StringBuilder と Random.Next(0,9) を使用して数値を生成し、数値、文字、数値などを追加して文字列を生成します...

ランダムメンバー

于 2008-11-21T14:41:20.603 に答える