这部分代码行为不端。 我想绘制一个用户定义的圆圈网格,每个圆圈都有一个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);
答案 0 :(得分:5)
不确定因为我无法测试它但随机randGen = new Random();不应该在for循环中。把它放在第一个for循环之前并保留randGen.Next(7);在循环内部。
答案 1 :(得分:0)
你每次都在初始化randgen。这里随机()不是真正的ramdom它遵循一些逻辑.. 并且它的时间依赖导致它的执行速度快,你可能得不到不同的数字,因为它可能在系统中获得相同的滴答计数
我编辑了我的回答
答案 2 :(得分:0)
这是Random
默认构造函数(.NET 4.5,反编译):
public Random()
: this(Environment.TickCount)
{
}
提示:很有可能你最终使用相同的种子,在循环之前移动Random
其他一些信息:
随机数生成从种子值开始。如果重复使用相同的种子,则生成相同的数字序列。产生不同序列的一种方法是使种子值与时间相关,从而与每个新的Random实例产生不同的序列。默认情况下,Random类的无参数构造函数使用系统时钟生成其种子值,而其参数化构造函数可以根据当前时间中的滴答数采用Int32值。
但是由于你的内循环运行得非常快,并且你在每次迭代时都创建了新实例,TickCount
可能不会改变