C# - 随机化四个字符串的大小写的函数总是 returns 每个字符串在相同的大小写
C# - Function to randomise case of four strings always returns each string in the same case
我正在尝试构建一个 Windows 形式的基本随机密码生成器。我有一个单词列表(全部小写),其中四个是随机选择的。每个单词都传递给一个函数以随机更改大小写(将第一个字符大写,将整个单词大写,或者只是 return 小写的字符串)然后添加到另一个列表中,如下所示:
var dictionary = new List<String> { "aaron", "abandoned", "aberdeen" etc... };
int index;
index = random.Next(dictionary.Count);
string one = dictionary[index];
one = randomCase(one);
pwarray.Add(one);
然后为字符串 two
、three
和 four
复制此代码。我在不花哨的情况下随机化案例的功能是这样的:
private string randomCase (string word)
{
string changed;
Random r = new Random();
int n = r.Next(1, 29);
// Output number to check it's not the same each time
MessageBox.Show(n.ToString());
if (n >= 1 || n <= 9)
{
// First letter capatalised
changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToLower());
return changed;
}
else if (n >= 10 || n <= 19)
{
// Word capitalised
changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToUpper());
return changed;
}
else if (n >= 20 || n <= 29)
{
// Word left as lower case
return word;
}
return null;
}
我添加了输出消息框来显示随机数 n
是什么,以帮助进行故障排除。当我 运行 应用程序时,我从我的 randomCase
函数中得到不同的数字 n
:
4 - 第一个字符大写
17 - 单词大写
20 - 单词保留为小写
24 - 保留为小写的单词
但是所有四个单词的第一个字母都大写了:
:
我生成了很多密码,它们似乎总是以相同的方式出现 - 只有第一个字母大写。谁能提供任何建议?
您应该在 class 中创建一个 Random 实例,或者您需要在每次创建它时都为它播种。您还应该使用 && 因为您希望 if 中的两个测试都成立。
如果我使用下面的代码:
private static string randomCase(string word)
{
string changed;
Random r = new Random(Guid.NewGuid().GetHashCode());
int n = r.Next(1, 29);
// Output number to check it's not the same each time
//MessageBox.Show(n.ToString());
//Console.WriteLine(n.ToString());
if (n >= 1 && n <= 9)
{
// First letter capatalised
changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToLower());
return changed;
}
else if (n >= 10 && n <= 19)
{
// Word capitalised
changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToUpper());
return changed;
}
else if (n >= 20 && n <= 29)
{
// Word left as lower case
return word;
}
return null;
}
public static void Main(string[] args)
{
//Your code goes here
for (int i = 0; i < 10; i++)
Console.WriteLine(randomCase("heLLo"));
}
我将得到以下输出:
HELLO
HELLO
Hello
heLLo
HELLO
Hello
Hello
HELLO
HELLO
HELLO
我正在尝试构建一个 Windows 形式的基本随机密码生成器。我有一个单词列表(全部小写),其中四个是随机选择的。每个单词都传递给一个函数以随机更改大小写(将第一个字符大写,将整个单词大写,或者只是 return 小写的字符串)然后添加到另一个列表中,如下所示:
var dictionary = new List<String> { "aaron", "abandoned", "aberdeen" etc... };
int index;
index = random.Next(dictionary.Count);
string one = dictionary[index];
one = randomCase(one);
pwarray.Add(one);
然后为字符串 two
、three
和 four
复制此代码。我在不花哨的情况下随机化案例的功能是这样的:
private string randomCase (string word)
{
string changed;
Random r = new Random();
int n = r.Next(1, 29);
// Output number to check it's not the same each time
MessageBox.Show(n.ToString());
if (n >= 1 || n <= 9)
{
// First letter capatalised
changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToLower());
return changed;
}
else if (n >= 10 || n <= 19)
{
// Word capitalised
changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToUpper());
return changed;
}
else if (n >= 20 || n <= 29)
{
// Word left as lower case
return word;
}
return null;
}
我添加了输出消息框来显示随机数 n
是什么,以帮助进行故障排除。当我 运行 应用程序时,我从我的 randomCase
函数中得到不同的数字 n
:
4 - 第一个字符大写
17 - 单词大写
20 - 单词保留为小写
24 - 保留为小写的单词
但是所有四个单词的第一个字母都大写了:
我生成了很多密码,它们似乎总是以相同的方式出现 - 只有第一个字母大写。谁能提供任何建议?
您应该在 class 中创建一个 Random 实例,或者您需要在每次创建它时都为它播种。您还应该使用 && 因为您希望 if 中的两个测试都成立。
如果我使用下面的代码:
private static string randomCase(string word)
{
string changed;
Random r = new Random(Guid.NewGuid().GetHashCode());
int n = r.Next(1, 29);
// Output number to check it's not the same each time
//MessageBox.Show(n.ToString());
//Console.WriteLine(n.ToString());
if (n >= 1 && n <= 9)
{
// First letter capatalised
changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToLower());
return changed;
}
else if (n >= 10 && n <= 19)
{
// Word capitalised
changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToUpper());
return changed;
}
else if (n >= 20 && n <= 29)
{
// Word left as lower case
return word;
}
return null;
}
public static void Main(string[] args)
{
//Your code goes here
for (int i = 0; i < 10; i++)
Console.WriteLine(randomCase("heLLo"));
}
我将得到以下输出:
HELLO
HELLO
Hello
heLLo
HELLO
Hello
Hello
HELLO
HELLO
HELLO