骰子模拟器int c#

时间:2014-08-30 09:35:30

标签: c#

我在c#中面对骰子模拟器中的一个问题。函数RandomGenerator生成一对骰子,直到这两个骰子的总和等于参数中的给定数字(从2到12)。计数变量保持次数这对骰子是滚动的。问题是当我输入偶数时它会正确返回计数。但是当我输入一个奇数时它什么也没做,甚至没有给出错误,短划线继续闪烁并闪烁。代码如下所示。任何人都可以帮助我吗?

 using System.Threading.Tasks;
 namespace ConsoleApplication1
 {
    class Program
    {


        static int RandomGenerator(int n)                                    
        {

            Random rand1 = new Random();                                              
            Random rand2 = new Random();                                               

            int sum = rand1.Next(1,7) + rand2.Next(1,7);                                  
            int count = 1;                                                              

            {
                sum = rand1.Next(1,7) + rand2.Next(1,7);                                
                count++;
            }

            return count;

        }


        static void Main(string[] args)
        {
            Console.WriteLine("Hello! this program  a pair of dice until total on dice is equal to your given number.\n\n");

            Console.WriteLine("Enter the number :");
            int num = int.Parse(Console.ReadLine());

            int rolls = RandomGenerator(num);
            Console.WriteLine("The number of rolls are:" + rolls);

        }
    }
}

3 个答案:

答案 0 :(得分:6)

问题在于您使用了两个Random个实例。默认情况下为they're initialized with Environment.TickCount seed,其精度约为15毫秒。这意味着它几乎可以保证您的Random类实例获得相同的种子,因此在每次调用Next时都会生成相同的值。两个相同数字的总和始终是偶数。

一个合适的解决方案是为两个骰子使用Random的单个实例。

答案 1 :(得分:1)

我建议的解决方案:

public static int RandomGenerator(int n)
{
    Random random = new Random();
    int sum = 0;
    int count = 0;

    do
    {
        sum = random.Next(1, 7) + random.Next(1, 7);
        count++;
    } while (sum != n);

    return count;
}

Victor Efimov对Random实例是正确的,我曾经使用随机生成器生成颜色时遇到类似问题:)

我还建议您对用户的输入进行健全性检查,以确保输入的值始终在2到12之间。这是为了避免在条件sum != n永远不会出现时被捕获在do-while循环中真。

答案 2 :(得分:0)

Aren你错过了一段时间还是for-loop?

我认为你应该在RandomGenerator方法中使用类似下面的代码:

static int RandomGenerator(int n)                                    
    {

        Random rand1 = new Random();                                               

        int sum = rand1.Next(1,7) + rand1.Next(1,7);                                  
        int count = 1;                                                              

        //while the sum variable isn't equal to your provided number, roll the dices again 
        while(sum != n)
        {
            sum = rand1.Next(1,7) + rand1.Next(1,7);                                
            count++;
        }

        return count;

    }