为什么添加Console.WriteLine()语句会更改C#代码的结果?

时间:2019-02-07 13:42:50

标签: c#

我遇到一个奇怪的问题,在我的代码中添加Console.WriteLine()语句会更改其提供的数值结果,这没有任何意义。有人知道会发生什么吗?我怀疑这可能是C#编译器中的错误。

我应该提到我错误地使用了一个随机数生成器(我应该在类中对其进行初始化,而应该在一个函数中进行初始化),这可能是发生这种情况的一部分。

我尝试将函数外部的随机数生成器初始化移到类中(请参见下文),这似乎可以解决问题,但是并不能解释正在发生的事情。

这是重现该问题的最简单的代码版本:

class Program
{
    static void Main(string[] args)
    {
        RandomAdd rnd = new RandomAdd();
        Console.WriteLine(rnd.ExpectationValue(1000));
    }
}

class RandomAdd
{
    public int Simulate(double probability)
    {
        int realization; //Realization of random number generator
        Random random = new Random();

        realization = random.Next(5);
        //Console.WriteLine("hey");
        return realization;
    }

    public double ExpectationValue(int numTrials)
    {
        int totalSkipped = 0;
        for (int i = 0; i < numTrials; i++)
        {
            totalSkipped += Simulate(.5);
        }

       return (double)totalSkipped / numTrials;
    }
}

我希望程序会打印浮点数,但是会打印一个整数。如果我取消注释Console.WriteLine(“ hey”)命令,它将打印浮点值。

有人知道这里发生了什么吗?

0 个答案:

没有答案