我用Windows窗体创建了一个随机密码生成器。
用户将选择密码的长度和将在Richtextbox中生成的密码数。
当我想生成超过1个密码时,会出现问题。
无论我怎么做,它一次都不会产生超过1个密码。
在下面发布代码。
string passwords = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890?!/@£#$%&[]+``^~*";
Random pass = new Random();
string passwordline { get; set; }
private void button1_Click(object sender, EventArgs e)
{
passwordline = "";
int passwordsNum = (int)numericUpDown1.Value;
int passwordLength = (int)numericUpDown2.Value;
int length = 0;
for (int i = 0; i<passwordsNum; i++)
{
for (int i2 = 0; i2 < passwordLength; i2++)
{
int randomnumbers = pass.Next(passwords.Length);
passwordline += passwords[randomnumbers];
length++;
if (passwordline.Length == passwordLength)
{
richTextBox1.Text += passwordline + Environment.NewLine;
}
}
}
}
答案 0 :(得分:1)
似乎您可能无法在每次新运行时将密码重置为空。尝试将代码更改为:
for (int i = 0; i<passwordsNum; i++)
{
passwordline = "";
for (int i2 = 0; i2 < passwordLength; i2++)
{
//Other code is the same
}
}
答案 1 :(得分:1)
您只需在两个密码之间添加一个新行,现在您可以生成“连接”成一个密码的字符序列(并删除一些错误):
string passwordline = "";
int passwordsNum = (int)numericUpDown1.Value;
int passwordLength = (int)numericUpDown2.Value;
for (int i = 0; i<passwordsNum; i++) {
passwordline = "";
for (int i2 = 0; i2 < passwordLength; i2++) {
int randomnumbers = pass.Next(passwords.Length);
passwordline += passwords[randomnumbers];
}
richTextBox1.Text += passwordline+"\n";
}
代码也更加优化:在if
循环中使用for
语句,而此代码永远不会执行,只需在语句结束时执行。