2015-10-20 63 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" : "");