【问题标题】:Checking if two items in an array are the same检查数组中的两个项目是否相同
【发布时间】:2014-12-06 14:00:32
【问题描述】:

所以我正在为大学编写一个程序,我必须在其中编写一个将名称存储到数组中的程序。 输入新名称时,它将被添加到数组的末尾。用户可以继续添加名称,直到输入虚拟值“exit” 完成此操作后,程序将显示所有重复的名称。

例如:

Enter name: Bill
Enter name: Mary
Enter name: Anisha
Enter name: Mary
Enter name: exit
Mary is a duplicate.

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

static void Main(string[] args)
{
    Console.WriteLine("This program allows you to write names to a list,");
    int i = 0;
    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.");
    while (name.ToLower() != "exit")
    {
        Console.WriteLine("Enter Name: ");
        name = Console.ReadLine();
        names.Add(name);
        i++;        
    }

    string[] nameArray = names.ToArray();

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

    Console.ReadLine();      
}

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

【问题讨论】:

  • 改成 for(int z = 0;z

标签: c# arrays string for-loop comparator


【解决方案1】:
string[] nameArray = names.ToArray();

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

    }

}

【讨论】:

  • 我怎么能这样说,我输入了 3 次相同的名字,而不是说“这个名字是重复的”3 次,它只会说“这个名字已重复 3 次”
【解决方案2】:

你可以使用Linq:

var group = nameArray.GroupBy(x => x);
foreach (var item in group.Where(x => x.Count() > 1))
{
    Console.WriteLine(string.Format(
        "The name: {0} is a duplicate ({1} times).", item.Key, item.Count()));
}

【讨论】:

  • @downvoter:您介意告诉我您认为我的解决方案有什么问题吗?
  • 对不起,我不是投票反对它的人,虽然我个人没有选择使用你的解决方案,因为我不知道它使用的大多数命令
【解决方案3】:

你几乎是对的,你的内部 for 循环的条件应该是这样的:

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

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多