繁体   English   中英

C#锋利列表(超出范围异常错误)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM