【问题标题】:C# List of names taskC# 名称列表任务
【发布时间】:2014-12-06 12:23:02
【问题描述】:

所以我正在为大学制作一个程序,我必须在其中编写一个将名称存储到数组中的程序。 输入新名称时,它将被添加到数组的末尾。用户可以继续添加名称,直到他们输入虚拟值“退出” 完成此操作后,程序将显示任何重复的名称。 例如。 输入姓名:比尔 输入姓名:玛丽 输入姓名:阿尼莎 输入姓名:玛丽 输入名称:退出 玛丽是复制品。

我还应该尝试显示每个名称重复了多少次。

    static void Main(string[] args)
    {
        Console.WriteLine("This program allows you to write names to a list,");
        int i = 0;

        //Due to the fact than i cannont resize an array after initialization, i used a list and converted it to an array at a later point
        List<string> names = new List<string>();


        string name = " ";
        Console.WriteLine("Enter names then press enter to add them to the list of names! if you wish to exit simple type exit.");
        //This loop adds names to the list
        while (name.ToLower() != "exit")
        {
            Console.WriteLine("Enter Name: ");
            name = Console.ReadLine();
            names.Add(name);
            i++;

        }

        //This line converts the list to an array
        string[] nameArray = names.ToArray();

        for(int z = 0;z <nameArray.Length + 1;z++)
        {
            for (int y = 0; y < z ; y++)
            {
                if (nameArray[y] == nameArray[z])
                {
                    Console.WriteLine("The name: " + nameArray[y] + " is a duplicate.");
                }
                else
                {
                    Console.Write(" ");
                }
            }

        }

        Console.ReadLine();
       }

这是我的代码,但是当我比较名称时它崩溃了,它给了我一个重复的名称,而没有其他名称。然后崩溃,我认为它与第二个 for 循环有关,但请有人运行它并帮助我。

【问题讨论】:

  • 这似乎是它的家庭作业,不是吗?
  • 是的,但我需要使用一个数组,它用于大学工作
  • 我也想了解数组的工作原理
  • names = new string[i]; 在这一行,i 是 1。所以字符串数组大小只有 1。那么你可以只访问 0-index。

标签: c# arrays loops variables main


【解决方案1】:

数组初始化后无法调整大小。您必须使用 List 而不是数组。

如果你只想使用数组,那么你必须在初始化时固定它的大小。您可以要求用户输入数组大小。或者你可以初始化一个长数组(但不推荐)。

【讨论】:

  • 我实际上发现了该怎么做,如果我在 while 循环中声明数组,它的大小会改变
  • 不,它会初始化一个新数组,你的旧值会丢失。
  • 每次迭代都重新调整大小或重新创建数组的效率非常低
  • 如何初始化长数组?
  • 您可以初始化 50 或 100 个项目数组。但我再说一遍,不推荐。如果可能,请使用 Mrinal Kamboj 代码。
【解决方案2】:

程序不正确,实际上这是一种例外情况,因为您的 i 初始值为 1,而您的字符串 [] 的大小为 1,因此您最多可以访问索引 0,实际上在第一个循环本身中您正在尝试索引 1,这是超出范围的异常。即使你纠正了逻辑不正确,它的设计方式也是如此。以下是更好的解决方案

 static void Main(string[] args)
    {
        Console.WriteLine("This program allows you to write names to a list,");:
        List<string> nameList = new List<string>();
        string name = " ";
        Console.WriteLine("Enter names then press enter to add them to the list of names! if you wish to exit simple type exit.");
        while (name.ToLower() != "exit")
        {
            Console.WriteLine("Enter Name: ");
            name = Console.ReadLine();
            nameList.Add(name);
        }
        string[] nameArray = nameList.ToArray();

        Console.ReadLine();
    }

nameArray 将是您需要作为响应的数组

【讨论】:

  • @Shaharyar 根据 OP,最终结果必须在一个数组中,实际上 List 在内部使用数组,它是可调整大小的数组。否则,除非在每次迭代中重新创建数组,否则您将如何动态调整数组大小,这是非常低效的
  • @Shaharyar 不管是否接受,这是有效的方式。我想不出更好的使用数组的方法
猜你喜欢
  • 2011-05-01
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多