c#中的随机数每次都应该是随机的?

时间:2011-11-12 02:54:39

标签: c# random-sample

我正在尝试为我的智力数学测验游戏生成随机数。但我认为我做错了。请帮我纠正我的代码。请尝试包含某种解释,为什么我的代码不正确。提前谢谢!

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;


    namespace MindTraining
    {
        class Program
        {
            static void Main(string[] args)
            {

                Console.WriteLine("Enter the digits of first number ");
                int a=int.Parse(Console.ReadLine());
                Console.WriteLine("Enter the digits of second number");
                int b = int.Parse(Console.ReadLine());

                Random RandomClass = new Random(DateTime.UtcNow.Second);

                int RandomNumber = RandomClass.Next(10^(a-1), 10^a);
                Console.WriteLine(RandomNumber);
    }


    }

}

我想要实现的是,我希望用户输入数字a中的位数和数字b中的位数

然后程序会生成随机数,比如说用户为a输入了2,那么程序必须生成0到10之间的数字(随机数,每次不同)

如果用户输入3代表a,则介于10到100之间,

类似于b,然后计算product.Number在程序运行期间不应重复超过2次。

好的,我将代码更改为

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace MindTraining
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Enter the digits of first number ");
            int a=int.Parse(Console.ReadLine());
            Console.WriteLine("Enter the digits of second number");
            int b = int.Parse(Console.ReadLine());

            Random RandomClass = new Random(DateTime.UtcNow.Second);
            double num1=Math.Pow(10,a-1);
            double num2=Math.Pow(a,1);
            int num3 = Convert.ToInt32( num1);
            int num4=Convert.ToInt32(num2);

            int RandomNumber = RandomClass.Next(num3,num4);
            Console.WriteLine(RandomNumber);
}}

//但仍然没有得到结果,我抛出错误,

这个有用了!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace MindTraining
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Enter the digits of first number ");
            int a=int.Parse(Console.ReadLine());
            Console.WriteLine("Enter the digits of second number");
            int b = int.Parse(Console.ReadLine());

            Random RandomClass = new Random();
            double num1=Math.Pow(10,(a-1));
            double num2=Math.Pow(10,(a));
            int num3 = Convert.ToInt32( num1);
            int num4=Convert.ToInt32(num2);

            int RandomNumber = RandomClass.Next(num3,num4);
            Console.WriteLine(RandomNumber);
}


}






        }

4 个答案:

答案 0 :(得分:1)

C#中的^运算符表示“异或”(XOR),而不是取幂。在这里阅读:http://www.dotnetperls.com/xor。请改为Math.Pow

答案 1 :(得分:1)

^不是c#中幂函数的加注。 请使用Math.Pow

答案 2 :(得分:0)

您是否有任何理由想要使用如此有限的种子值?为什么不使用

Random RandomClass = new Random();

为您的对象采用基于默认时间的种子值?

另外,使用Math.pow(base,exp)计算Random.next()调用的范围:

int RandomNumber = RandomClass.Next((int)Math.Pow(10,(a-1)), (int)Math.Pow(10,a));

在您的代码中,错误发生是因为,

double num2=Math.Pow(a,1);

返回一个自己。因此,Random.next()中的maxvalue低于你的minvalue,这在逻辑上是不正确的。这是我从运行你的代码得到的错误,这是因为你在最后错过了一个右大括号。

另外,你必须意识到没有完全随机数发生器这样的东西。所有这些都是伪随机生成器。它们遵循数字线上正常的数字分布。因此,除非您存储生成的所有数字并继续检查它们,否则在一次执行中不会生成两次以上的数字是不可行的。这应该是最后的手段,只有可怕的要求。

答案 3 :(得分:0)

在生成 TRULY 随机数时,您不能认为数字始终不同,希望您明白这一点。所以你需要另外确保每次都有不同的数字。