我对数组有点陌生,我制作了一个char数组(其中有174种东西),但我不知道如何以随机方式输出它。我正在尝试为系统创建安全代码。我想从那个174个char数组中输出13个char到一个文本框中,但是我不明白我的逻辑。先感谢您!以下是每次按钮单击仅输出1个字符的代码:
Random rnd = new Random();
int randomnum = rnd.Next(0, 174);
for (int x = 0; x <= 13; x++)
{
textBox11.Text = chararray[randomnum];
}
答案 0 :(得分:2)
您的代码几乎在其中,但存在一些问题:
您需要将新字符附加到字符串的末尾,就像直接设置Text
值一样。您可以使用+=
而不是=
轻松地做到这一点。
您需要为循环的每次迭代选择不同的随机字符,因此将调用移至.Next
内的for
。
将其放在一起,您将得到以下内容:
Random rnd = new Random();
for (int x = 0; x <= 13; x++)
{
int randomnum = rnd.Next(0, 174);
textBox11.Text += chararray[randomnum];
}
但是请注意,如果这是出于安全目的,那么使用Random
并不是很好。你或许应该使用类似RNGCryptoServiceProvider
。例如:
using (var rng = new RNGCryptoServiceProvider())
{
byte[] password = new byte[10];
rng.GetBytes(password);
textBox11.Text = Convert.ToBase64String(password).Remove(13);
}
答案 1 :(得分:1)
我已附上此代码工作的屏幕截图。我有一个小错字
这将随机更改种子
int seed = 1;
创建Random的实例,我们不需要每次使用时都重新创建它
Random r = new Random(seed);
这只会初始化字符
char[] _myChars = new char[170];
for(var i = 0; i < _myChars.Length; i++)
{
_myChars[i] = (char)(i%26 + 65);
}
这是您要查找的查询,它将查询字符并以r.Next()
的随机顺序对它们进行排序
var output = _myChars.OrderBy(o => r.Next()).Take(13).ToList();
这仅用于显示输出,您想在文本框中使用输出
for(var i = 0; i < output.Count; i++)
{
Console.WriteLine(output[i]);
}
Console.ReadLine();