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; 

Этот код по существу будет сравнивать значения, которые имеет каждый объект карты, и если две карты в массиве имеют одинаковое значение, верните true. У нас есть 5 карт в каждой руке, и поэтому длина массива равна 5. Метод getValue возвращает целое число, которое по существу является значением карты. Кажется, я не знаю, что я делаю неправильно, чтобы получать ошибки в моем методе.Java CARD Class compare method

+0

Если вы хотите, чтобы люди, чтобы помочь вам, вы должны сказать нам, что эти ошибки и то, что вы ожидали вместо , Не заставляй нас гадать. –

ответ

3

Ошибка доступа к вашему массиву при использовании j + 1, который будет за пределами границ, если j - четыре (в конце длины для value). И я предпочел бы использовать value.length вместо hardcoding. Что-то вроде

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

@ Тома Хорошая точка. Отредактировано, чтобы включить это и другой вариант. –