【问题标题】:Problems with displaying information from an array显示数组信息的问题
【发布时间】:2015-09-29 19:11:23
【问题描述】:

我正在尝试用 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 未处理”和 @ 987654323@ 被突出显示。

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

感谢阅读。

【问题讨论】:

  • 由于&lt;=10,您正在超出范围异常,在您的第二个循环中应该是&lt;10
  • @PoweredByOrange,非常感谢
  • 在调试模式下测试您的应用程序将在发生异常的行引发异常,并让您能够查看局部变量及其值。这将向您显示长度为 10(索引 0-9)的数组,但 j 循环到 10 导致 IndexOutOfRangeException。

标签: c# arrays loops


【解决方案1】:

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

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

    更好的是,您可以在循环中使用i &lt; names.Lengthj &lt; 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;
    }
    

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

    【讨论】:

      【解决方案3】:

      要解决错误,只检查小于 10 (

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

      【讨论】:

      • 这可能不会打印所有值。最好的方法是洗牌。
      【解决方案4】:

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

      {弗兰克、保罗、约翰}

      所以 Array[0] 是 Frank, 并且 Array[3] 是...超出范围。

      你的循环使用

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

      第一次,j = 0,names[j] 对我们来说是 Frank。你的问题是因为 10

      解决办法是改变j

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

      【讨论】:

        猜你喜欢
        • 2016-10-25
        • 2021-03-20
        • 2011-02-24
        • 1970-01-01
        • 2018-12-02
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 2012-05-09
        相关资源
        最近更新 更多