如何随机生成1000个6位数的序列

时间:2017-03-10 12:09:19

标签: c# .net winforms random

我想随机生成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;
 }

8 个答案:

答案 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快速解决方法是使用+

来使用contatination
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>

实施例: enter image description here

因此,如果你想要随机数,你应该避免使用随机并使用来自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);