我想弄清楚为什么我的代码无效。试图为学校创建一个扑克计划,并试图编写一对方法。我必须返回一个布尔值。不知道为什么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;
答案 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
检查。您仍需要重置每张卡的计数,但仍需要做一些事情来检查两对。这种方法应该很容易以一般方式查找一对和两对,因为您也需要这样做。