1

这部分代码行为不端。我想从一组 7 种颜色的列表中绘制一个用户定义的圆圈网格,每个圆圈都有一种随机颜色。随机数生成器应该这样做。圆圈的网格画得很好,它的颜色让我很伤心。我似乎每个网格最多有两种颜色,前十种是一种颜色,其余的是第二种颜色。这很奇怪,因为代码应该循环通过颜色生成器,然后画一个圆圈并重复。请帮我找出麻烦的台词,自己花了太长时间尝试!

忽略对 JEWEL_HEIGHT 和类似的引用,它们只是与程序相关的变量名。

              int columns = int.Parse(textBoxColumns.Text);
            int rows = int.Parse(textBoxRows.Text);


            for (int y = 0; (y < rows * 20); y += JEWEL_HEIGHT)
            {
                for (int x = 0; (x < columns * 20); x += JEWEL_WIDTH)
                {


                    Color brushColor = (Color.Red);
                    Random randGen = new Random();
                    int randColor = randGen.Next(7);
                    if (randColor == 0)
                        brushColor = (Color.Red);
                    else if (randColor == 1)
                        brushColor = (Color.Orange);
                    else if (randColor == 2)
                        brushColor = (Color.Yellow);
                    else if (randColor == 3)
                        brushColor = (Color.Green);
                    else if (randColor == 4)
                        brushColor = (Color.Blue);
                    else if (randColor == 5)
                        brushColor = (Color.Indigo);
                    else if (randColor == 6)
                        brushColor = (Color.Violet);

                    Graphics paper = pictureBoxJewels.CreateGraphics();
                    SolidBrush brush = new SolidBrush(brushColor);

                    paper.FillEllipse(brush, x, y, JEWEL_WIDTH, JEWEL_HEIGHT);
4

3 回答 3

5

不确定,因为我无法测试它,但 Random randGen = new Random(); 不应在 for 循环内。将它放在第一个 for 循环之前并保留 randGen.Next(7); 在循环内部。

于 2013-04-01T08:14:16.873 回答
0

这是Random默认构造函数(.NET 4.5,反编译):

public Random()
      : this(Environment.TickCount)
    {
    }

提示:很有可能你最终会使用相同的种子,在循环之前移动Random创建

一些附加信息:

随机数生成从种子值开始。如果重复使用相同的种子,则会生成相同的数字序列。产生不同序列的一种方法是使种子值与时间相关,从而为每个新的 Random 实例产生不同的序列。默认情况下,Random 类的无参构造函数使用系统时钟生成其种子值,而其有参构造函数可以根据当前时间的刻度数取一个 Int32 值。

但是由于您的内部循环运行得非常快,并且您在每次迭代时都创建了新实例,因此有TickCount 可能不会改变

于 2013-04-01T08:44:44.997 回答
0

你每次都初始化 randgen。这里 Random() 并不是真正随机的,它遵循一些逻辑.. 它的时间依赖性导致它执行速度快你可能不会得到不同的数字,因为它可能在系统中获得相同的滴答计数。

我编辑了我的答案

于 2013-04-01T08:19:21.750 回答