-4

我正在尝试为我的心算测验游戏生成随机数。但我认为我做错了什么。请帮助我更正我的代码。请尝试包括某种解释,为什么我的代码不正确。提前致谢!

 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 的位数

然后程序将生成随机数,假设用户输入 2 为 a ,然后程序必须生成 0 到 10 之间的数字(随机数,每次不同)

如果用户为 a 输入 3,则在 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

4 回答 4

1

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

于 2011-11-12T02:59:02.417 回答
1

^ 不是对 c# 中幂运算符的提升。为此使用Math.Pow

于 2011-11-12T03:00:24.040 回答
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);

返回 a 本身。因此,您在 Random.next() 中的最大值低于您的最小值,这在逻辑上是不正确的。这是我从运行您的代码中得到的错误,除了您最后缺少一个右大括号之外。

此外,您必须意识到不存在完美的随机数生成器。所有这些都是伪随机生成器。它们遵循数轴上数字的正态分布。因此,除非您存储所有生成的数字并继续检查它们,否则说一个数字在一次执行中不会生成超过两次是不可行的。这应该是最后的手段,只有在迫切要求的情况下。

于 2011-11-12T03:12:30.663 回答
0

在生成一个真正的随机数时,你不能假设这个数字总是不同的,希望你明白了。因此,您还需要确保每次的数字都不同。

于 2011-11-12T03:28:49.790 回答