[英]C# Sharp List (Out of Range Exception Error)
我希望对我的程序有所帮助。 应该随机安排我班的座位顺序。 但是,我不断收到“超出范围的异常”。尽管所有索引都从0开始,但是我尝试了但无法修复它。 我如何摆脱这一点。 如果可能,是否可以不重复列表中的元素? 对于不正确的问题,我深表歉意,但这是我的代码...
using System;
using System.Collections.Generic;
public class Program
{
public static void Main(string[] args)
{
List<string> list = new List<string>();
list.AddRange(new String[]
{
"Daria", "Denisa", "Erica",
"Merlin", "Nicoletta", "Mia",
"Lilian", "Karel", "Luveesh",
"Milan", "Oliver","Tea",
"Carlos", "Raneem", "Marsha",
"Uros", "Oguzhan"
});
Random random = new Random();
Console.WriteLine("Type 'x' then hit 'Enter' to exit");
string userInput = Console.ReadLine();
if (userInput == "x")
{
foreach (var item in list)
{
Console.WriteLine("");
Console.WriteLine("Table 1: " + "" + list[random.Next(1, list.Count)] + "," + "" + list[random.Next(2, list.Count)]);
Console.WriteLine("Table 2: " + "" + list[random.Next(3, list.Count)] + "," + "" + list[random.Next(4, list.Count)]);
Console.WriteLine("Table 3: " + "" + list[random.Next(5, list.Count)] + "," + "" + list[random.Next(6, list.Count)]);
Console.WriteLine("Table 4: " + "" + list[random.Next(7, list.Count)] + "," + "" + list[random.Next(8, list.Count)]);
Console.WriteLine("Table 5: " + "" + list[random.Next(9, list.Count)] + "," + "" + list[random.Next(10, list.Count)]);
Console.WriteLine("Table 6: " + "" + list[random.Next(11, list.Count)] + "," + "" + list[random.Next(12, list.Count)]);
Console.WriteLine("Table 7: " + "" + list[random.Next(13, list.Count)] + "," + "" + list[random.Next(14, list.Count)]);
Console.WriteLine("Table 8: " + "" + list[random.Next(15, list.Count)] + "," + "" + list[random.Next(16, list.Count)]);
Console.WriteLine("Table 9: " + "" + list[random.Next(17, list.Count)]);
Console.ReadLine();
}
}
}
}
}
C#被索引为0,从0开始而不是从1开始。
您的list
包含17个元素,其中第一个通过list[0]
访问,最后一个通过list[16]
。 在您的foreach循环的最后一行内..
// <------------ here ------------>
Console.WriteLine("Table 9: " + "" + list[random.Next(17, list.Count)];
..您使用random.Next(min, max)
生成一个随机数。 MSDN指出, min
是随机数的包含下限,而max
是返回的随机数的排除上限。 因此,问题在于,您尝试创建一个以min
为17(含17)(包括列表)的随机数,以max
列出列表(也为17(独占))。 因此,生成的随机数为17。由于C# list[17]
基于零,因此访问list[17]
引发了上述异常。
在foreach
循环中修改代码,例如..
foreach (var item in list)
{
Console.WriteLine("");
Console.WriteLine("Table 1: " + "" + list[random.Next(0, list.Count)] + "," + "" + list[random.Next(1, list.Count)]);
Console.WriteLine("Table 2: " + "" + list[random.Next(2, list.Count)] + "," + "" + list[random.Next(3, list.Count)]);
Console.WriteLine("Table 3: " + "" + list[random.Next(4, list.Count)] + "," + "" + list[random.Next(5, list.Count)]);
Console.WriteLine("Table 4: " + "" + list[random.Next(6, list.Count)] + "," + "" + list[random.Next(7, list.Count)]);
Console.WriteLine("Table 5: " + "" + list[random.Next(8, list.Count)] + "," + "" + list[random.Next(9, list.Count)]);
Console.WriteLine("Table 6: " + "" + list[random.Next(10, list.Count)] + "," + "" + list[random.Next(11, list.Count)]);
Console.WriteLine("Table 7: " + "" + list[random.Next(12, list.Count)] + "," + "" + list[random.Next(13, list.Count)]);
Console.WriteLine("Table 8: " + "" + list[random.Next(14, list.Count)] + "," + "" + list[random.Next(16, list.Count)]);
Console.WriteLine("Table 9: " + "" + list[random.Next(15, list.Count)]);
Console.ReadLine();
}
..应该可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.