2016-11-21 94 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好點。編輯包括那個和另一個選項。 –