2014-10-11 190 views
0

所以即時編寫一個大學課程,我必須編寫一個程序將名稱存儲到數組中。 當輸入新名稱時,它將被添加到數組的末尾。用戶可以繼續添加名稱,直到他們輸入虛擬值'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,但請有人可以運行這個幫助我嗎?

+0

改變它爲(INT Z = 0 ; z 2014-10-11 14:29:47

+0

仍然沒有工作 – user3063533 2014-10-11 14:32:55

回答

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."); 
     } 

    } 

} 
+0

我該怎麼做才能說,我輸入3次相同的名稱,而不是說「名稱是重複的」3次,它將只會說「這個名字已被複制3次」 – user3063533 2014-10-11 14:44:04

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())); 
} 
+0

@downvoter:你介意告訴我你認爲我的解決方案錯了嗎? – 2014-10-11 14:40:20

+0

對不起,我不是那個投下它的人,我個人並沒有選擇使用你的解決方案,因爲我沒有大部分使用的命令的知識 – user3063533 2014-10-11 14:42:48

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".); 
} 
相關問題