2015-10-20 62 views
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace DiceGame 
{ 
class Program 
    { 



    static void Main(string[] args) 
    { 
     Random randomnumber = new Random(); 

     int[] Player = new int[5]; 
     Player[0] = randomnumber.Next(1, 6); 
     Player[1] = randomnumber.Next(1, 6); 
     Player[2] = randomnumber.Next(1, 6); 
     Player[3] = randomnumber.Next(1, 6); 
     Player[4] = randomnumber.Next(1, 6); 
     Console.WriteLine("You rolled a " + Player[0] + " " + Player[1] + " " + Player[2] + " " + Player[3] + " " + Player[4]); 
     Console.WriteLine(" You have a " + however many are equal); 
    } 
    } 
} 

編輯:我需要將數組中的多個數字相互比較。他們是隨機的1-6,如果2相等,我需要顯示對。如果3個都等於顯示三種,如果四個四個五,一個五個如何比較數組中的數字

edit2:我唯一能找到的就是這個,但它只是比較Player [0]和其餘的陣列

for (int i = 0; i < Player.Length; i++) 
     { 
      int count = 0; 
      for (int j = 0; j < Player.Length; j++) 
      { 
       if (Player[i] == Player[j]) 
        count = count + 1; 
      } 

      Console.WriteLine("\t\n " + Player[i] + " occurs " + count); 




      Console.ReadKey(); 
+1

你這裏只是一個數組。你想與之比較什麼? – Kapol

+0

「if 2 are equal」是什麼意思? (順便說一句,使用全英文而不是文字說話通常對堆棧溢出很有幫助。) –

+1

你有什麼試過的?另外,嘗試使用完整的單詞,這樣可以更輕鬆地閱讀問題,並且您可能看起來像對幫助人員有一定的尊重。 – MikeH

回答

1

您可以foreach循環通常這樣寫:

int theSame = 0; 
foreach (var x in Player) 
{  
    int localTheSame = 0; 
    foreach (var y in Player) 
    { 
     if (x == y) 
     { 
      localTheSame++; 
     } 
    } 

    if (localTheSame > theSame) 
    { 
     theSame = localTheSame; 
    } 
}  

我你EDIT2之前寫了這個答案,所以我想你想顯示任意數量的最大事件。

編輯

使用LINQ同樣的解決方案:

int theSame = Player.Max(x => Player.Count(y => x == y)); 
+0

這個作品我的編輯二說是唯一的事情只是試圖將它與數組中的第一個相比,我正在尋找最大的事件,非常感謝 –

+0

@RyanVanDusen我添加了一個使用LINQ的解決方案。如果你熟悉它,它是1行而不是15左右。 – Kapol

1

您可以使用LINQ來獲得每個數字的計數。

Random randomnumber = new Random(); 

     int[] Player = new int[5]; 
     Player[0] = randomnumber.Next(1, 6); 
     Player[1] = randomnumber.Next(1, 6); 
     Player[2] = randomnumber.Next(1, 6); 
     Player[3] = randomnumber.Next(1, 6); 
     Player[4] = randomnumber.Next(1, 6); 
     Console.WriteLine("You rolled a " + Player[0] + " " + Player[1] + " " + Player[2] + " " + Player[3] + " " + Player[4]); 
     var selected = from x in Player.AsEnumerable() 
         group x by x into g 
         select new { Digit = g.Key, DigitCount = g.Count()}; 
    foreach(var sel in selected) 
    { 
     Console.WriteLine("You have rolled " + sel.Digit + " no of times " + sel.DigitCount); 
    } 
+0

你應該通過初始化循環內的播放器的每個值來更新答案。 –

+0

@KevinAvignon我剛剛採取了OP發佈的內容,並添加了他想要的邏輯。是的,你是正確的初始化可以在循環內完成。 – Hakunamatata

0

你能做到那樣簡單:

foreach (var p in Player.GroupBy(x => x).Select(x => new { Player = x.Key, Count = x.Count()})) 
      Console.WriteLine("Player {0} occurs {1} time{2}", p.Player, p.Count, p.Count == 1 ? "s" : "");