没有MessageBox,c#数组没有工作初始化

时间:2017-03-30 18:24:47

标签: c# arrays winforms

我在c#程序中遇到了一个奇怪的问题。该程序的目的是掷骰子并显示其输出。该程序的逻辑很好,只有当我输出到消息框时才有效。这是代码:

private void btnRoll_Click(object sender, EventArgs e)
    {
        lbDice.Items.Clear();
        int[] rolls = new int[13];
        for (int i = 1; i < numTxt.Value; i++) {
            int index = new Random().Next(1, 7) + new Random().Next(1, 7);
            //MessageBox.Show(index + ""); THIS LINE IS REQUIRED
            rolls[index] += 1;
        }
        updateList(rolls);
    }


    public void updateList(int[] rolls)
    {
        for (int i = 1; i < rolls.Length; i++)
        {
            lbDice.Items.Add("" + i + "  " + rolls[i]);
        }
    }

如果不存在,程序将只为每个索引添加1。

2 个答案:

答案 0 :(得分:1)

根据我的经验,这与Random类如何生成随机数有关。多次执行new Random()可以为每种情况创建相同的值。

仅尝试创建Random类实例一次:

Random rand = new Random();
for (int i = 1; i < numTxt.Value; i++) {
    int index = rand.Next(1, 7) + rand.Next(1, 7);
    rolls[index] += 1;
}

作为实验,您可以将MessageBox行替换为Sleep,看看是否也有效

答案 1 :(得分:0)

无需每次都创建一个Random实例。保留它并重复使用它。 如果您创建的实例距离太近,它们将产生与随机生成器从系统时钟播种相同的随机数序列。

此代码(如下)可能会对您有所帮助。

using System;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please provide a number and press 'Enter'");
            var input = Console.ReadLine();

            int lenght;
            if (!int.TryParse(input, out lenght))
            {
                lenght = 10;
            }
            int l = 13;
            int[] rolls = new int[l];

            var rnd = new Random();

            for (int i = 1; i < lenght; i++)
            {
                int index = rnd.Next(1, 7) + rnd.Next(1, 7);
                //MessageBox.Show(index + ""); THIS LINE IS REQUIRED
                rolls[index] += 1;
            }

            for (int i = 0; i < l; i++)
            {
                Console.WriteLine($"rolls[{i}] = {rolls[i]}");
            }

            Console.WriteLine("Done. Prss any key to exit");
            Console.ReadKey();
        }
    }
}

总的来说,我认为这与this question

有关 祝你好运!