我正在尝试为我的智力数学测验游戏生成随机数。但我认为我做错了。请帮我纠正我的代码。请尝试包含某种解释,为什么我的代码不正确。提前谢谢!
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);
}
}
}
答案 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 随机数时,您不能认为数字始终不同,希望您明白这一点。所以你需要另外确保每次都有不同的数字。