简体   繁体   中英

How to randomly generate 1000 sequences of 6 digit number

I want to generate 1000 number randomly and put the result in a rich text box ,but the result I got from my code is just one number appearing in the rich text box !!

 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;
 }

You are overriding the value of s each time you get your next number. Instead you have to add the number to a list. Something like this would work.

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);
}

Problem is that you actually overwrite at each iteration the string s. You need to append the number to the old ones.

for (int i = 0; i < 1000; i++)
{
    s += _random.Next(min, max).ToString("D6") + "\n";
}
richTextBox1.Text = s;

You could also use AppendText method

for (int i = 0; i < 1000; i++)
{
    richTextBox1.AppendText(_random.Next(min, max).ToString("D6") + "\n");
}

Suggestion by Matthew Watson : When generating such a large string it is very adviseable to use a StringBuilder . Is has much better performance than a normal concatenation of strings:

StringBuilder sb = new StringBuilder(8000);

for (int i = 0; i < 1000; i++)
{
    sb.AppendLine(_random.Next(min, max).ToString("D6"));
}

richTextBox1.Text = sb.ToString();

You actually need to concatenate the result with previous calculated result, right now it is replacing the string value in s every time loop executes and you end up only with the last value in s , a quick fix is to use contatination using + :

for (int i = 0; i < 1000; i++)
{
  s+= _random.Next(min, max).ToString("D6") + "\n"; // now it keeps previous values as well
}

As most of the answers here using the .net class Random i would not use it, because in a direct comparison it doesn't creates strong random numbers.

Example: 在此处输入图片说明

So if you want strong random numbers you should refrain from using Random and use the RNGCryptoServiceProvider from the namesapace System.Security.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();
    }
}
s += _random.Next(min, max).ToString("D6") + "\n";
  ^
  |
  ---- You're missing this plus sign

just You need to add ' + ' for the richtextbox1 as like below

try this one

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;
        }

    }

on this line of code you override the Text of richTextBox1

for (int i = 0; i < 1000; i++)
    {
       s = _random.Next(min, max).ToString("D6") + "\n";
    }
    richTextBox1.Text = s;

just change it to (add a + after s )

for (int i = 0; i < 1000; i++)
    {
       s += _random.Next(min, max).ToString("D6") + "\n";
    }
    richTextBox1.Text = s;

Note that the maxValue or Random.Next is exclusive, so 999999 is never genereted.

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);

Or a bit more efficient:

richTextBox1.Text = Enumerable.Repeat(new Random(), 1000).Aggregate(new StringBuilder(7000)
                , (b, r) => b.AppendFormat("{0:D6}\n", r.Next(1000000))).ToString(0, 6999);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM