2016-11-21 66 views
-1
int[] value = new int[5]; 
boolean result = true; 
for(int i = 0; i < 5; i++) { 
    value[i] = cards[i].getValue(); 
} 
for(int i = 0; i < 5; i++) { 
    for(int j = i;j < 5; j++) { 
     if(value[i] == value[j + 1]) { 
      result = false; 
     } 
    } 
} 
return result; 

此代码实质上是要比较每个卡片对象的值,并且如果数组中的两张卡片具有相同的值,则返回true。我们每手有5张牌,这就是阵列长度为5的原因。getValue方法返回一个整数,它基本上是卡的值。我似乎并不知道自己做错了什么,因为我的方法出错。Java CARD类比较方法

+0

如果你想要的人来帮助你,你应该告诉我们那些错误,你所期待的,而不是。不要让我们猜测。 –

回答

3

当您使用j + 1时,您的数组访问权限不正确,当j为4时(在value的长度末尾),这将会超出范围。而且,我宁愿使用value.length而不是硬编码。类似于

for (int i = 0; i < value.length - 1; i++) { 
    for (int j = i + 1; j < value.length; j++) { 
     if (value[i] == value[j]) { 
      result = false; 
     } 
    } 
} 

此外,正如汤姆指出的,在评论中;当result变为false时继续迭代是毫无意义的。当它变为false并完全避免result变量时,您可以简单地返回。像,

for (int i = 0; i < value.length - 1; i++) { 
    for (int j = i + 1; j < value.length; j++) { 
     if (value[i] == value[j]) { 
      return false; 
     } 
    } 
} 
return true; 

另一个选项,在Java 8+,会像

return IntStream.of(value).allMatch(x -> value[0] == x); 
+1

我们应该考虑在'if'分支中返回,而不仅仅是设置某个结果值。这避免了遍历和检查剩余数组的不必要的时间。 – Tom

+1

@Tom好点。编辑包括那个和另一个选项。 –