OnePair Pokerhand方法java

时间:2014-02-07 18:52:45

标签: java

我想弄清楚为什么我的代码无效。试图为学校创建一个扑克计划,并试图编写一对方法。我必须返回一个布尔值。不知道为什么count变量返回如此高的值,如果我的数组有数字2,2,3,4,5。

public static boolean containsPair(int [] hand)  
{
  boolean pair = false;
  int count = 1;
  for(int i = 0; i < 5; i++)
  {
    for(int j = 1; j < 5; j++)
    {
      if (hand[i] == hand[j])
      count++;

    }

  }
  System.out.println(count);
  if (count == 2)
  pair = true;
  return pair;

2 个答案:

答案 0 :(得分:3)

在您的2个嵌套for循环中,您正在计算i == j的情况,以便每张卡等于自身。从j所在的任何地方开始i

for(int j = i + 1; j < 5; j++)

这样,您不会进行两次比较,也不会将卡与自身进行比较。您现在只将卡片与该卡片上的所有卡片进行比较。

答案 1 :(得分:1)

您基本上将所有卡与所有其他卡进行比较。例如,i和j在某些时候都是4。因此if (hand[i] == hand[j])时会i==j为真。

此外,您将所有卡的值相加,您需要在每张卡之后重置它(在第一次for循环的每次迭代之后)。

for(int i = 0; i < 5; i++)
{
   count = 1;
   for(int j = 0; j < 5; j++)
   {
      if ((i != j) && (hand[i] == hand[j]))
         count++;
   }
   if (count == 2)
       pair = true;
 }

当然,如果有两对,这将返回true,所以你也必须考虑到这一点。

编辑:@ rgettman是正确的,您可以开始使用他的for循环删除重复项并删除i!=j检查。您仍需要重置每张卡的计数,但仍需要做一些事情来检查两对。这种方法应该很容易以一般方式查找一对和两对,因为您也需要这样做。