繁体   English   中英

我的代码只能在“进入”中正常运行,而不能正常运行

[英]My code only works properly in 'step into' and not normally

基本上我希望我的代码生成两个随机数,然后等于它们。 当我进入但不是正常情况下,它应该如何运作,而我无法为自己的生活弄清楚原因! 当我正常运行它时,这两个数字总是相同的,但是当我进入程序时,它们是不同的。 我希望他们都是随机的。 如果有帮助,我正在使用Visual Studio 2015。 先感谢您!

class Program
{
    static void Main(string[] args)
    {
        DiceRoll DR = new DiceRoll();
        DR.SecondRolledDice();
    }
}  

public int RolledDice()
    {
        Random numberGenerator;
        numberGenerator = new Random();
        int firstdiceroll = numberGenerator.Next(1, 7);

        return firstdiceroll;
    }        

    public void SecondRolledDice()
    {
        Random SecondnumberGenerator;
        SecondnumberGenerator = new Random();
        int seconddiceroll = SecondnumberGenerator.Next(1, 7);

        DiceRoll DR = new DiceRoll();
        var diceroll = DR.RolledDice();

        string NumberName;
        string NumberNameTwo;
        string sum;
        string[] SecondNumberNames;
        SecondNumberNames = new string[12] { "One", "Two", "Three", "Four", "Five", "Six", "seven", "eight", "Nine", "ten", "eleven", "twelve"};

        NumberName = SecondNumberNames[seconddiceroll - 1];
        NumberNameTwo = SecondNumberNames[diceroll - 1];
        sum = SecondNumberNames[(diceroll + seconddiceroll) - 1];

        Console.WriteLine("{0} Plus {1} Equals {2} ", NumberName, NumberNameTwo, sum);         
    }  

System.Random文档中:

Random()构造函数使用系统时钟来提供种子值。 这是实例化随机数生成器的最常见方法。

如果将相同的种子用于单独的随机对象,则它们将生成相同系列的随机数。

另外,从避免多重实例化部分:

以紧密循环或快速连续方式初始化两个随机数生成器会创建两个随机数生成器,它们可以产生相同的随机数序列。 在大多数情况下,这不是开发人员的意图,并且可能导致性能问题,因为实例化和初始化随机数生成器是一个相对昂贵的过程。

为了提高性能并避免无意间创建单独的随机数生成器以生成相同的数字序列,我们建议您创建一个随机对象以随时间推移生成许多随机数,而不是创建新的随机对象以生成一个随机数。

您需要实例化随机一次,然后为两个骰子调用Next方法。

您的RolledDice()方法在每次调用它时都会重新创建Random对象,这就是导致生成相同数字的原因。

只需声明您的Random numberGenerator = new Random(); 一次作为全局变量(也许,为了良好实践,可以在主方法实例化上创建它),然后重用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM