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