1

我有以下代码可以生成要绘制在条形图上的随机数。但是,它只有在我在特定行上设置断点时才能正常工作,否则,所有 10 个新数据点都会出现完全相同的数字。

case 3:
                //Add ten data sets to go through all default colors
                DatasetPairing<BarPresentation, BarGraphDataset<GraphableDouble>> datasetPairing;

                foreach (HorizontalBarPlotter<GraphableDouble, GraphableDouble> graphPlotter in this.Data.GraphPlots)
                {
                    for (int i = 1; i <= 11; i++)
                    {
                        datasetPairing = new DatasetPairing<BarPresentation, BarGraphDataset<GraphableDouble>>();
                        datasetPairing.DatasetPresentation = new BarPresentation();
                        datasetPairing.GraphableDataset = GetOneDataset(0, false);
                        graphPlotter.DatasetMap.Add(datasetPairing); //breakpoint set here
                    }
                    List<IAxis> xAxes;
                    xAxes = new List<IAxis>();
                    xAxes.Add(graphPlotter.DetermineXAxis());
                    this.Data.BottomAxes = xAxes;
                    this.Data.TopAxes = xAxes;
                }
                NextStep = "Return to a single dataset and add comment to values for tooltips";
                break;

我不知道为什么会这样,而且我以前从未听说过这样的问题......也许这是视觉工作室中的一个错误?任何帮助将不胜感激

4

3 回答 3

6

没有真正的随机数,你只有伪随机数。随机数的创建基于通常是当前时间的种子。

如果您每次想要一个新的随机数时都创建一个新对象,那么它将是相同的数字,因为时间没有改变。(请记住,当您运行应用程序时,一切都在不到一毫秒的时间内发生 - 当您调试应用程序时,在创建 2 个新随机变量之间有一段时间,因此随机数不同)

您应该使用一个对象来创建所有随机数,并使用 Random.Next() 来获取新的随机值。

如果您查看 Random 类的文档,您将看到以下行:

通过调用默认构造函数连续创建的不同 Random 对象将具有相同的默认种子值

解决方案是:

这个问题可以通过使用单个 Random 对象来生成所有随机数来避免。您还可以通过修改系统时钟返回的种子值,然后将这个新的种子值显式提供给 Random(Int32) 构造函数来解决此问题。

于 2013-07-08T15:30:21.683 回答
0

如果您使用的是 Random 类,请确保您不是每次都创建一个新对象。

来自msdnusing the parameterless constructor to create different Random objects in close succession creates random number generators that produce identical sequences of random numbers. This problem can be avoided by creating a single Random object rather than multiple ones.

我通常创建一个静态随机对象并始终将其用于随机数,这样您就不会重复

于 2013-07-08T15:32:51.010 回答
0

我怀疑您用来创建随机点的方法使用Random.Next(). 如果快速连续调用它,它可以返回相同的值。可能值得添加延迟Thread.Sleep()

于 2013-07-08T15:26:25.043 回答