我想随机生成1000个数字并将结果放在一个富文本框中,但我从代码中得到的结果只是一个出现在富文本框中的数字!!
private Random _random = new Random();
int min = 000000;
int max = 999999;
string s;
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 1000; i++)
{
s = _random.Next(min, max).ToString("D6") + "\n";
}
richTextBox1.Text = s;
}
答案 0 :(得分:6)
每次获得下一个号码时,您都会覆盖s的值。相反,您必须将数字添加到列表中。这样的事情会起作用。
List<string> numbers = new List<string>();
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 1000; i++)
{
numbers.Add(_random.Next(min, max).ToString("D6"));
}
richTextBox1.Text = string.Join(Environment.NewLine, numbers);
}
答案 1 :(得分:4)
问题是你实际上在每次迭代时都会覆盖字符串s。您需要将数字附加到旧数字。
for (int i = 0; i < 1000; i++)
{
s += _random.Next(min, max).ToString("D6") + "\n";
}
richTextBox1.Text = s;
您还可以使用AppendText
方法
for (int i = 0; i < 1000; i++)
{
richTextBox1.AppendText(_random.Next(min, max).ToString("D6") + "\n");
}
Matthew Watson的建议:当生成如此大的字符串时,建议使用StringBuilder。是否具有比正常串联字符串更好的性能:
StringBuilder sb = new StringBuilder(8000);
for (int i = 0; i < 1000; i++)
{
sb.AppendLine(_random.Next(min, max).ToString("D6"));
}
richTextBox1.Text = sb.ToString();
答案 2 :(得分:4)
您实际上需要将结果与先前的计算结果连接起来,现在它每次循环执行时都会替换s
中的字符串值,而您最终只能使用s
中的最后一个值,a快速解决方法是使用+
:
for (int i = 0; i < 1000; i++)
{
s+= _random.Next(min, max).ToString("D6") + "\n"; // now it keeps previous values as well
}
答案 3 :(得分:4)
由于此处大多数答案都使用.net类随机我不会使用它,因为在直接比较中它不会创建强随机数。< / p>
因此,如果你想要强随机数,你应该避免使用随机并使用来自namesapace System.Security的 RNGCryptoServiceProvider .Cryptography 强>
ExampleCode:
private RNGCryptoServiceProvider _random = new RNGCryptoServiceProvider ();
int min = 000000;
int max = 999999;
private void Form1_Load(object sender, EventArgs e)
{
int[] results = new int[1000];
var buffer = new byte[4];
int min = 100000;
int max = 999999;
for (int i = 0; i < results.Length; i++) {
while(results[i] < min || results[i] > max)
{
_random.GetBytes(buffer);
results[i] = BitConverter.ToInt32(buffer, 0);
}
richTextBox1.Text += results[i].toString();
}
}
答案 4 :(得分:2)
s += _random.Next(min, max).ToString("D6") + "\n";
^
|
---- You're missing this plus sign
答案 5 :(得分:0)
只需要为richtextbox1
添加“+”,如下所示
尝试这个
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 1000; i++)
{
s = _random.Next(min, max).ToString("D6") + "\n";
richTextBox1.Text + = s;
}
}
答案 6 :(得分:0)
在这一行代码中,您覆盖了Text
richTextBox1
for (int i = 0; i < 1000; i++)
{
s = _random.Next(min, max).ToString("D6") + "\n";
}
richTextBox1.Text = s;
只需将其更改为(在+
之后添加s
)
for (int i = 0; i < 1000; i++)
{
s += _random.Next(min, max).ToString("D6") + "\n";
}
richTextBox1.Text = s;
答案 7 :(得分:0)
请注意,maxValue或Random.Next
是独占的,因此999999永远不会生成。
var numbers = Enumerable.Repeat(new Random(), 1000)
.Select(r => r.Next(1000000).ToString("D6")); // the same new Random() instance is used for all .Next
richTextBox1.Text = string.Join("\r\n", numbers);
或者更有效率:
richTextBox1.Text = Enumerable.Repeat(new Random(), 1000).Aggregate(new StringBuilder(7000)
, (b, r) => b.AppendFormat("{0:D6}\n", r.Next(1000000))).ToString(0, 6999);