如何解决 "IndexOutOfRange exception" 错误?
How to resolve an "IndexOutOfRange exception" error?
我不明白哪里出了问题。
static int WinningColumn()
{
Random rnd = new Random(46);
int[] winningnumbers = new int[6];
int[] Check = new int[46];
int i;
for (i = 0; i < winningnumbers.Length; i++)
{
winningnumbers[i] = rnd.Next(46);
Check[winningnumbers[i]]++;
if (Check[winningnumbers[i]] > 1)
{
i--;
continue;
}
错误发生在这里:
}
return winningnumbers[i];
}
我不知道你想在这里实现什么。
但是循环会在 i 变成 6 时终止。
因此,您基本上是在尝试访问 winningnumbers[6],这是不正确的,因为 winningnumbers 数组的长度为 6,因此您可以使用从 0 到 5 的索引。
您可以尝试使用中奖号码 [i-1]
当您退出 for 循环时,索引器变量 i 的值大于可能的最大索引(这是中断循环的条件)。
在您的情况下,变量 i 的值为 6,但数组 winningnumbers 的最大索引可能为 5。(0 到 5 是六个整数元素)。
不清楚您的意图是什么,但假设您的目的是生成 0 到 45 之间的六个中奖号码,那么您的代码应该以这种方式重写和简化
static List<int> WinningColumn()
{
// Do not initialize Random with a fixed value
// You will get always the same 'random' sequence
Random rnd = new Random();
// Create a list to store the winners
List<int> winningnumbers = new List<int>();
int i = 0;
while(i < 6)
{
int newNumber = rnd.Next(46);
if(!winningnumbers.Contains(newNumber))
{
// If the list doesn't contain the number the add it and increment i
// Otherwise run the loop again....
winningnumbers.Add(newNumber);
i++;
}
}
// This returns the whole list to the caller,
// you can use it as an array
return winningnumbers;
}
请注意,您的实际代码在随机数生成器的声明中包含一个错误。您传递一个初始种子,因此,每次调用此方法时,随机生成器都会以相同的数字序列再次启动。结果将是一个相同的数字列表。 Not very random to me
如果您不传递任何内容,那么生成器将使用系统时间进行初始化,因此每次调用此方法时都应该不同。
我不明白哪里出了问题。
static int WinningColumn()
{
Random rnd = new Random(46);
int[] winningnumbers = new int[6];
int[] Check = new int[46];
int i;
for (i = 0; i < winningnumbers.Length; i++)
{
winningnumbers[i] = rnd.Next(46);
Check[winningnumbers[i]]++;
if (Check[winningnumbers[i]] > 1)
{
i--;
continue;
}
错误发生在这里:
}
return winningnumbers[i];
}
我不知道你想在这里实现什么。
但是循环会在 i 变成 6 时终止。 因此,您基本上是在尝试访问 winningnumbers[6],这是不正确的,因为 winningnumbers 数组的长度为 6,因此您可以使用从 0 到 5 的索引。
您可以尝试使用中奖号码 [i-1]
当您退出 for 循环时,索引器变量 i 的值大于可能的最大索引(这是中断循环的条件)。
在您的情况下,变量 i 的值为 6,但数组 winningnumbers 的最大索引可能为 5。(0 到 5 是六个整数元素)。
不清楚您的意图是什么,但假设您的目的是生成 0 到 45 之间的六个中奖号码,那么您的代码应该以这种方式重写和简化
static List<int> WinningColumn()
{
// Do not initialize Random with a fixed value
// You will get always the same 'random' sequence
Random rnd = new Random();
// Create a list to store the winners
List<int> winningnumbers = new List<int>();
int i = 0;
while(i < 6)
{
int newNumber = rnd.Next(46);
if(!winningnumbers.Contains(newNumber))
{
// If the list doesn't contain the number the add it and increment i
// Otherwise run the loop again....
winningnumbers.Add(newNumber);
i++;
}
}
// This returns the whole list to the caller,
// you can use it as an array
return winningnumbers;
}
请注意,您的实际代码在随机数生成器的声明中包含一个错误。您传递一个初始种子,因此,每次调用此方法时,随机生成器都会以相同的数字序列再次启动。结果将是一个相同的数字列表。 Not very random to me
如果您不传递任何内容,那么生成器将使用系统时间进行初始化,因此每次调用此方法时都应该不同。