c中的随机数,每次都应该是完全随机的

本文关键字:随机 随机数 | 更新日期: 2023-09-27 18:14:23

我正在尝试为我的心理数学问答游戏生成随机数。但我觉得我做错了什么。请帮我更正代码。请尝试包括某种解释,为什么我的代码不正确。提前感谢!

 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,然后计算乘积。在程序运行期间,数字重复次数不应超过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);
}

}



        }

c中的随机数,每次都应该是完全随机的

^不是c#中幂运算符的提升。使用数学。Pow for this。

C#中的^运算符的意思是"异或"(XOR(,而不是求幂。点击此处阅读:http://www.dotnetperls.com/xor。请改用Math.Pow

您想使用如此有限的种子值有什么原因吗?为什么不使用

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((中的最大值低于最小值,这在逻辑上是不正确的。这就是我在运行您的代码时遇到的错误,除了结尾缺少一个大括号之外。

此外,你必须意识到,不存在完全随机数生成器这样的东西。所有这些都是伪随机生成器。它们遵循数字在数字线上的正态分布。因此,说一个数字在一次执行中生成的次数不会超过两次是不可行的,除非你存储所有生成的数字并不断检查它们。这应该是最后的手段,只是在要求苛刻的情况下。

在生成TRULY随机数时,您不能假设该数字一直不同,希望您能理解。因此,您还需要确保每次的数字都不同。