Java CARD类比较方法

时间:2016-11-21 03:42:53

标签: java

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方法返回一个整数,它实际上是卡的值。我似乎不知道自己在做错方法时遇到了什么错误。

1 个答案:

答案 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);