我试图在for循环中向画布绘制几行,但似乎只是绘制了一行。我做错了什么?
for (int x = 0; x < 10; x++)
{
Random rand = new Random();
double newTop = rand.Next(0, 50);
Line top = new Line();
top.Stroke = Brushes.Black;
top.StrokeThickness = 2;
top.Width = 50;
top.X1 = x * top.Width;
top.Y1 = 0;
top.X2 = x * top.Width + top.Width;
top.Y2 = newTop;
Canvas.SetTop(top, 0);
Canvas.SetLeft(top, x * top.Width);
TheCanvas.Children.Add(top);
}
感谢, Tarran
答案 0 :(得分:4)
每次都可以从随机生成器获得相同的值:
默认种子值源自系统时钟并具有有限的分辨率。因此,通过调用默认构造函数紧密连续创建的不同Random对象将具有相同的默认种子值,因此将生成相同的随机数集。“
我建议移动
行Random rand = new Random();
在循环前面。
此外,从第二步开始,你似乎是在画布之外画画。请尝试使用以下代码:
Random rand = new Random();
for (int x = 0; x < 10; x++)
{
double newTop = rand.Next(0, 50);
Line top = new Line();
top.Stroke = Brushes.Black;
top.StrokeThickness = x + 1;
top.Width = 500;
int width = 50;
top.X1 = x * width;
top.Y1 = 0;
top.X2 = x * width + width;
top.Y2 = newTop;
Canvas.SetTop(top, 0);
Canvas.SetLeft(top, 0 /*x * top.Width*/);
TheCanvas.Children.Add(top);
}
答案 1 :(得分:0)
你一遍又一遍地绘制同一条线,你需要用不同的东西播种随机数。
Random rand = new Random(Guid.NewGuid().GetHashCode());
您的另一个选择是将随机创建移到循环之外,并像使用Next
一样使用Random rand = new Random();
for (int x = 0; x < 10; x++)
{
double newTop = rand.Next(0, 50);
Line top = new Line();
top.Stroke = Brushes.Black;
top.StrokeThickness = 2;
top.Width = 50;
top.X1 = x * top.Width;
top.Y1 = 0;
top.X2 = x * top.Width + top.Width;
top.Y2 = newTop;
Canvas.SetTop(top, 0);
Canvas.SetLeft(top, x * top.Width);
TheCanvas.Children.Add(top);
}
。我建议使用这个选项:
Random
这样可以防止{{1}}每次都重新播种。