4

私は、女性と男性の名のリストと、配列内の姓のリストを持っています。

私がやろうとしていたのは、ランダムジェネレーターを使用してそれらの名前をそれらの配列に取り、呼び出しに応じてランダムな名と姓を出力することでした。

終わったら、そのメソッドを毎回書き出すのではなく、他のクラスでそのメソッドを参照するつもりでした。

これが私がこれまでに持っているコードです:

  private void RandName()
  {
        string[] maleNames = new string[1000] { "aaron", "abdul", "abe", "abel", "abraham", "adam", "adan", "adolfo", "adolph", "adrian"};
        string[] femaleNames = new string[1000] { "abby", "abigail", "adele", "adrian"};
        string[] lastNames = new string[1000] { "abbott", "acosta", "adams", "adkins", "aguilar"};

        Random rand = new Random(DateTime.Now.Second);
        if (rand.Next(1, 2) == 1)
        {
            FirstName = maleNames[rand.Next(0, maleNames.Length - 1)];
        }
        else
        {
            FirstName = femaleNames[rand.Next(0, femaleNames.Length - 1)];
        }

  }

私の質問は:作成した名前の配列を使用してランダムな名前ジェネレータを作成する方法は?

4

7 に答える 7

8

ランダムジェネレーターの結果は毎回同じだと思います..

これが問題である場合は、rand毎回ローカル変数を作成しないでください。代わりにフィールドを作成してください。

次のようなものです:

private static Random rand = new Random(DateTime.Now.Second);

private void RandName()
{
   ...
}
于 2013-02-04T13:29:33.697 に答える
5

さて、あなたが直面している問題を知らなくても、これは暗闇の中で少し突き刺さっていますが、あなたの問題は、配列サイズをとして宣言した1000が、それぞれに約10個の値しか入力していないことだと思います。したがって、配列は1%しか満たされていません。そのため、ほとんどの場合、空の名前を取得します。

次のことを試してください。

// Note I have not specified the array size.
string[] maleNames   = {"aaron", "abdul", "abe", "abel", "abraham", "adam", "adan", "adolfo", "adolph", "adrian"};
string[] femaleNames = {"abby", "abigail", "adele", "adrian"};
string[] lastNames   = {"abbott", "acosta", "adams", "adkins", "aguilar"};
于 2013-02-04T13:26:14.283 に答える
2

ランダムなインスタンスが作成さRandNameれるため、メソッドが非常に高速に呼び出されると同じ名前が作成されます (ループ内の fe)。フィールドを使用するか、ランダムを引数としてメソッドに渡す必要があります。

それを除けば、elseここのブロックにたどり着くことはありません

if (rand.Next(1, 2) == 1)

の 2 番目のパラメーターRandom.Nextは排他的な上限であり、常に 1 を生成するためです。したがって、代わりにこれが必要になる場合があります。

if (rand.Next(0, 2) == 1)
于 2013-02-04T13:29:13.883 に答える
0
    public string GenerateToken(Byte length) {
        var bytes = new byte[length];
        var rnd = new Random();
        rnd.NextBytes(bytes);
        return Convert.ToBase64String(bytes).Replace("=", "").Replace("+", "").Replace("/", "");
    }

非常に単純なジェネレーターです..

于 2015-06-11T14:03:39.157 に答える
0

AutoPocoを見てみるべきだと思います。

使い方の一例。

また、ドキュメントを詳しく調べると、姓名の既存のデータ ソースが見つかります (使用、拡大、または置換できます)。

于 2013-02-04T13:59:20.683 に答える
0

文字列を次のようにフォーマットします...

    string[] maleNames = new string[] { "aaron", "abdul", "abe", "abel", "abraham", "adam", "adan", "adolfo", "adolph", "adrian"};
    string[] femaleNames = new string[] { "abby", "abigail", "adele", "adrian"};
    string[] lastNames = new string[] { "abbott", "acosta", "adams", "adkins", "aguilar"};

または私にとってより簡単な方法は、リストを使用することです。ファイルを反復処理するためにそれらを使用します。主な違いは、List.Add() を使用して一度に 1 つずつ追加する必要があり、Array.Length の代わりに List.Count を使用することです。リストを使用すると、配列のサイズを変更せずにエントリを変更することもできます。あなたの場合、作成しようとしているリストは次のようになります

List<string> maleNames = new List<string>();
List<string> femaleNames = new List<string>();
List<string> lastNames = new List<string>();

次に、System.IO を使用して個別のファイルを開き、各行を 3 つのリストに読み込みます。それは私がそれをする方法です。

于 2013-05-28T22:37:09.573 に答える