【问题标题】:Randomize string and add to listbox随机化字符串并添加到列表框
【发布时间】:2016-03-29 11:16:16
【问题描述】:

我无法随机化 X 个字符串并将它们添加到我的 listbox。它一遍又一遍地添加相同的字符串。我希望它为每个字符串添加 1 行。如果我说 amount 是 11,它只会创建一个字符串并将其添加 11 次到 listbox。我做错了什么?

这是我的代码:

for (int i = 0; i < amount; i++)
        {

            Random adomRng = new Random();
            string rndString = string.Empty;
            char c;

            for (int t = 0; t < 8; t++)
            {
                while (!Regex.IsMatch((c = Convert.ToChar(adomRng.Next(48, 128))).ToString(), "[a-z0-9]")) ;
                rndString += c;
            }

            listBox1.Items.Add(rndString);
        }

【问题讨论】:

  • 您使用默认种子在每个循环中创建一个新的 Random 对象?他们应该每次都生成相同的东西。
  • 我想生成 X 数量的字符串,长度为 8。它创建的每个字符串都应该添加到列表框中。这不是我的代码告诉它做什么吗?我很混乱。 idk 为什么它不工作@Johnny
  • 把你的随机数 adomRng = new Random();在 for 循环之外。

标签: c# string winforms list random


【解决方案1】:

你就快到了,只需在你的代码中做两处简单的更改即可实现目标:

for (int t = 0; t < 8; t++)
 {
   rndString =""; //Change 1
   while (!Regex.IsMatch((c = Convert.ToChar(adomRng.Next(48, 128))).ToString(), "[a-z0-9]")) ;
   rndString += c;
   listBox1.Items.Add(rndString);// change  2
 }

【讨论】:

    【解决方案2】:
    Random adomRng = new Random();
    for (int i = 0; i < amount; i++)
    {
        string rndString = string.Empty;
        char c;
        for (int t = 0; t < 8; t++)
        {
            while (!Regex.IsMatch((c = Convert.ToChar(adomRng.Next(48, 128))).ToString(), "[a-z0-9]")) ;
            rndString += c;
        }
        listBox1.Items.Add(rndString);
    }
    

    random init 代码放在循环之外,它会得到正确的结果

    说明:在短时间内创建多个新的随机对象(比如说在 for 循环中)将始终为您提供相同的输出,因为它将使用 当前时间戳 作为随机种子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-20
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多