我有一个女性和男性名字的列表,然后是数组中的姓氏列表。
我试图做的是使用随机生成器在这些数组中获取这些名称,并根据我调用的内容输出随机的名字和姓氏。
在我完成之后,我将在其他课程中引用该方法,而不是每次都写出来。
这是我到目前为止的代码:
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)];
}
}
我的问题是:如何使用我创建的名称数组创建随机名称生成器?
答案 0 :(得分:5)
我猜你的随机生成器的结果每次都是一样的..
如果这是您的问题,则不应每次都创建局部变量rand
。改为创建字段。
Smth喜欢:
private static Random rand = new Random(DateTime.Now.Second);
private void RandName()
{
...
}
答案 1 :(得分:5)
public static string GenerateName(int len)
{
Random r = new Random();
string[] consonants = { "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "l", "n", "p", "q", "r", "s", "sh", "zh", "t", "v", "w", "x" };
string[] vowels = { "a", "e", "i", "o", "u", "ae", "y" };
string Name = "";
Name += consonants[r.Next(consonants.Length)].ToUpper();
Name += vowels[r.Next(vowels.Length)];
int b = 2; //b tells how many times a new letter has been added. It's 2 right now because the first two letters are already in the name.
while (b < len)
{
Name += consonants[r.Next(consonants.Length)];
b++;
Name += vowels[r.Next(vowels.Length)];
b++;
}
return Name;
}
答案 2 :(得分:3)
好的,不知道你遇到的问题,这在黑暗中有点刺痛,但我认为你的问题是你已经将数组大小声明为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"};
答案 3 :(得分:2)
由于随机实例是在RandName
中创建的,因此当调用方法非常快时(例如,在循环中),您将创建相同的名称。您应该使用字段或将random作为参数传递给方法。
除此之外,你永远不会到达else
阻止
if (rand.Next(1, 2) == 1)
因为Random.Next
的第二个参数是独占上限,它总是生成1.所以你可能想要这个:
if (rand.Next(0, 2) == 1)
答案 4 :(得分:0)
答案 5 :(得分: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。我用它们来迭代文件。主要区别是你必须使用List.Add()一次添加一个,它使用List.Count而不是Array.Length。 List还允许您修改条目,而无需调整数组大小。在您的情况下,您尝试创建的列表将如下所示
List<string> maleNames = new List<string>();
List<string> femaleNames = new List<string>();
List<string> lastNames = new List<string>();
然后使用System.IO打开单独的文件并将每行读入三个列表。这就是我做的方式。
答案 6 :(得分: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("/", "");
}
是一个非常简单的发电机..