所以我正在为大学制作一个程序,我必须编写一个将名称存储到数组中的程序。 输入新名称后,它将添加到数组的末尾。用户可以继续添加名称,直到他们输入虚拟值'exit' 完成此操作后,程序将显示任何重复的名称。
E.g:
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
有关,但是有人可以运行这个并帮助我吗?
答案 0 :(得分:2)
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.");
}
}
}
答案 1 :(得分:1)
您可以使用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()));
}
答案 2 :(得分:1)
你几乎是对的,你的内部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".);
}