我对编程很新(几天前开始),我决定制作一个随机数生成器。我遇到的问题是,我无法生成一个非常大的数字。我四处搜索,并读到我可以将'int'更改为'long',但是当涉及到随机数生成器时,我遇到了麻烦。
这是我的代码的一部分:
long min;
long max;
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("Minimum Number: ");
min = Convert.ToInt64(Console.ReadLine());
Console.Write("Maxinum Number: ");
max = Convert.ToInt64(Console.ReadLine());
if (max < min)
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("You must choose a larger number! Press any key to restart...\n");
Console.ReadKey(true);
Generator();
}
Random randomnumber = new Random();
while (true)
{
long randomnumout = randomnumber.Next(min, max + 1);
Console.ForegroundColor = ConsoleColor.White;
int randomsleep = randomnumber.Next(250, 750);
Console.WriteLine("\nGenerating...");
Thread.Sleep(randomsleep);
}
在视觉工作室,
randomnumber.Next(min, max + 1)
带下划线
错误:
Error 2 Argument 1: cannot convert from 'long' to 'int'
Error 3 Argument 2: cannot convert from 'long' to 'int'
Error 1 The best overloaded method match for 'System.Random.Next(int, int)' has some invalid arguments
我在网上搜索过,我仍感到困惑。
答案 0 :(得分:0)
Random.Next(int, int)将int作为参数,long不会隐式转换为int类型。
这就是你收到错误的原因。
接下来就是,即使你将long类型转换为int类型,如果long类型变量的值超过int.Max值,它将设置垃圾值(-1)。
答案 1 :(得分:-1)
您需要从ulong转换为int
while (true)
{
long randomnumout = randomnumber.Next(Convert.ToInt32(min), Convert.ToInt32(max + 1));
Console.ForegroundColor = ConsoleColor.White;
int randomsleep = randomnumber.Next(250, 750);
Console.WriteLine("\nGenerating...");
Thread.Sleep(randomsleep);
}
或者你可以通过int32而不是64来获得数字。
int min;
int max;
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("Minimum Number: ");
min = Convert.ToInt32(Console.ReadLine());
Console.Write("Maxinum Number: ");
max = Convert.ToInt32(Console.ReadLine());
if (max < min)
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("You must choose a larger number! Press any key to restart...\n");
Console.ReadKey(true);
//Generator();
}
Random randomnumber = new Random();
while (true)
{
int randomnumout = randomnumber.Next(min, max + 1);
Console.ForegroundColor = ConsoleColor.White;
int randomsleep = randomnumber.Next(250, 750);
Console.WriteLine("\nGenerating...");
Thread.Sleep(randomsleep);
}
请参阅:https://msdn.microsoft.com/en-us/library/system.random.next(v=vs.110).aspx