C#无法从'long'转换为'int'(随机数生成器)

时间:2015-02-07 09:58:34

标签: c#

我对编程很新(几天前开始),我决定制作一个随机数生成器。我遇到的问题是,我无法生成一个非常大的数字。我四处搜索,并读到我可以将'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  

我在网上搜索过,我仍感到困惑。

2 个答案:

答案 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