显示来自数组的信息时出现问题

本文关键字:问题 信息 数组 显示 | 更新日期: 2023-09-27 18:15:22

我正在尝试用c#代码(控制台应用程序)编写一个简单的程序,提示用户输入10个名称,然后以随机顺序(不是名称输入的顺序)在末尾显示10个名称

这是我得到的结果:-

static void Main(string[] args)
{
    string[] names = new string [10];
    int i;
    for ( i = 0; i < 10 ; i++)
    {
        Console.WriteLine("Give me name " + (i+1) );
        names[i] = Console.ReadLine();
    }
    for (int j = 0; j <= 10; j++)
    {
        Console.WriteLine(names[j]);
    }
    Console.ReadLine();
}

到目前为止,我已经能够提示用户输入10个名称,并存储这10个名称,并在最后显示它们,然而,一旦它们被显示,我得到错误:-"IndexOutOfRangeException未处理",Console.WriteLine(names[j]);得到突出显示。

最后,一旦对这些问题进行了排序,我如何以随机顺序显示输入的名称?

显示来自数组的信息时出现问题

从输入得到0到9,但尝试打印0到10。数组中不存在第10项。修改如下:

for (int j = 0; j < 10; j++)
{
    Console.WriteLine(names[j]);
}

第一个循环从0运行到9,但第二个循环从0运行到10,因此您尝试显示数组中不存在的项。将循环中的j <= 10更改为j < 10(就像在第一个循环中一样),以循环到9而不是10。

更好的是,您可以在循环中使用i < names.Lengthj < names.Length。这样,即使你改变数组的大小,循环也不会发生任何变化。


要以随机顺序显示项目,您需要洗牌数组。最好的方法是费雪-耶茨洗牌法。像这样排列数组中的项:

Random rnd = new Random();
for (int i = 0; i < names.Length − 1; i++) {
   int j = rnd.Next(i, names.Length);
   string tmp = names[i];
   names[i] = names[j];
   names[j] = tmp;
}

那么你就可以像现在这样显示数组中的项了(在循环中进行了校正)

要解决错误,只检查小于10 (<10)而不是小于或等于10 (<=10)使用random类获得随机顺序。确保只创建一个随机实例并调用Next,以便在紧循环

中生成新的随机数。
Random random = new Random();
for (int j = 0; j < 10; j++)
 {
    int randomNumber = random.Next(1,10);
 Console.WriteLine(names[randomNumber-1]);
 }

问题是您的索引是基于0的,并包含10个条目,但最后一个是Array[9]而不是Array[10]

{弗兰克,保罗,约翰}

所以Array[0]是Frank,数组[3]是…超出范围

循环使用

 for (int j = 0; j <= 10; j++)
{
    Console.WriteLine(names[j]);
}

第一次通过,j = 0,名字[j]对我们来说就是Frank。你的问题是,因为10 <= 10确实为真,所以它正在寻找j[10],而j[10]并不存在。

解决方案是改变j <10

   for (int j = 0; j < 10; j++)
   {
       Console.WriteLine(names[j]);
   }