从数组显示信息的问题

时间:2015-09-29 19:11:23

标签: c# arrays loops

我正在尝试在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个名称,并在最后显示它们,但是,一旦显示它我就会收到错误: - &#34; IndexOutOfRangeException未处理&# 34;并且Console.WriteLine(names[j]);会突出显示。

最后,一旦这些问题被排序,我如何以随机顺序显示返回的名称?

感谢阅读。

4 个答案:

答案 0 :(得分:1)

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

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

希望这有帮助。

答案 1 :(得分:1)

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

更好的是,您可以在循环中使用i < names.Lengthj < names.Length。这样你就可以改变数组的大小,循环仍然可以不做任何改动。

要以随机顺序显示项目,您需要随机播放该数组。最好的方法是Fisher-Yates shuffle。像这样随机播放数组中的项目:

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;
}

然后你可以按照现在的方式显示数组中的项目(在循环中进行校正)。

答案 2 :(得分:0)

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

{弗兰克,保罗,约翰}

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

你的循环使用

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

第一次通过,j = 0,名字[j]对我们来说将是弗兰克。你的问题是因为10&lt; = 10确实是真的,它正在寻找j [10],它不存在。

解决方案是改变j&lt; 10

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

答案 3 :(得分:0)

要解决错误,只检查少于10(<10)而不是小于或等于10(&lt; = 10) 并获得随机顺序使用随机类。确保只创建一个随机实例,然后调用Next以便在紧密循环中生成新的随机数

Random random = new Random();
for (int j = 0; j < 10; j++)
 {
    int randomNumber = random.Next(1,10);
 Console.WriteLine(names[randomNumber-1]);
 }