程序在自动模式和调试模式下的结果是不同的

时间:2013-12-19 11:48:37

标签: c# debugging properties project

当我在项目中进行调试模式时,我可以看到真实的结果,我确信,这是正确的代码。但当我开始应用程序不在调试模式 - 我得到错误的结果!

另外,当我厌倦了在调试模式下工作时,按“继续”按钮,我看到了什么?调试后,程序开始出错!

你能告诉我,发生了什么事吗??我不知道为什么会这样!

这是我的代码。如果您有任何疑问,请写信给我。我可以回答任何问题。

var tinarr = new List<double>();
        var toutarr = new List<double>();

        tin=RandTime(lambda);
        while (tin > T & tin<=0)
        {
            tin = RandTime(lambda);
        }
        Tin = tin;

        for (double i = step; i <= T; i += step)
        {
            if (Tin > T) break;
            if (Tout > T) break;
            while (Tin <= i)
            {
                if (CarCount < L / l)
                {
                    CarIn++;
                    CarCount++;
                    tinarr.Add(Tin);
                    listBox1.Items.Add("+" + Tin.ToString());

                    //генерация времени выезда для въехавшей машины
                    tout = RandTime(mu);
                    //Tout = 0;
                    Tout += tout;
                    while (Tout <= Tin)
                    {
                        Tout -= tout;
                        tout = RandTime(mu);
                        Tout += tout;
                    }
                    if (toutarr.Count > 0)
                    {
                        while (Tout <= toutarr[0])
                        {
                            Tout -= tout;
                            tout = RandTime(mu);
                            Tout += tout;
                        }
                    }                        
                    if (Tout > T) break;

                    toutarr.Add(Tout);
                    listBox2.Items.Add(Tout.ToString());
                }
                else
                {
                    CarError++;
                    listBox1.Items.Add(Tin.ToString());
                }

                //генерация времени следующей въехавшей машины
                tin = RandTime(lambda);
                Tin += tin;
                if (Tin > T) break;

                //OUT cars
                /* * */
                if (toutarr.Count > 0)
                {
                    for (int j = toutarr.Count - 1; j >= 0; j--)
                    {
                        if (toutarr.Count > 0)
                        {
                            if (toutarr[j] < Tin)
                            {
                                toutarr.RemoveAt(j);
                                CarCount--;
                                CarOut++;
                            }
                        }                            
                    }
                }
                /* ^ */
            }

因此。结果1,当programm不在调试模式下时。你可以看到数字重复。

result 1

结果2,它在调试模式下工作。真实的结果。

result 2

1 个答案:

答案 0 :(得分:0)

好的,我将在黑暗中拍摄。我的猜测是你使用的是基于时间的随机数生成器,而不是生成它的一个实例并使用相同的实例来生成随机数的样本,您将在每次迭代时重新实例化随机数生成器。现在,当程序不处于调试模式时,每次迭代都在相同的时钟周期内进行(从而为生成器提供相同的种子),以便第一次调用每个实例的.Next()生成的第一个数字产生相同的数字。当您进入调试模式并开始逐步执​​行代码时,您将在生成器的每个实例化之间放置几秒钟,因此您为每个实例提供不同的种子。那样,你看到了正确的结果。当您再次点击继续时,从该点开始实例化的生成器使用相同的结果开始,并且重新发生不正确的行为。

解决方法很简单。创建一个随机数生成器。使其对您的应用程序保持静态。对此实例进行所有调用。