2016-11-21 5 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; 

このコードは基本的に各カードオブジェクトの値を比較し、配列内の2つのカードが同じ値を持つ場合は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; 
     } 
    } 
} 

また、コメントでは、指摘されているように、 resultfalseになると繰り返しを続けるのは無意味です。 falseになったときに戻って、result変数を完全に避けることができます。同様に、Javaの8+で

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; 

のオプションは、あなたは人々があなたを助けたい場合は、あなたがこれらのエラーが何であるかを教えなければならないし、あなたの代わりに期待したもの

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

そして、特定の結果値を設定するだけでなく、 'if'ブランチに戻ることについて考えるべきです。これにより、残りの配列をトラバースしてチェックするための不必要な時間が回避されます。 – Tom

+1

@Tom良い点。それと別のオプションを含むように編集されています。 –