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#中幂运算符的提升。使用数学。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随机数时,您不能假设该数字一直不同,希望您能理解。因此,您还需要确保每次的数字都不同。