Как сравнивать массивы без использования .equals и с ложным логическим значением - PullRequest
0 голосов
/ 12 октября 2018

Мне нужно сравнивать массивы без использования метода .equals, и в настоящее время программа работает правильно, за исключением случаев, когда у меня есть две переменные, такие как

int[] y = {8,8,8};
int[] z = {8,8,9};

Моя программа говорит, что это правда, когда она должна сказать, что этоложный.Вот мой код CompareArrays:

if (arrayOne.length == arrayTwo.length) {
   for (int i = 0; i < arrayOne.length; i++) {
      if (arrayOne[i] == arrayTwo[i]) {
         return true;
      }
   }
}

return areEqual;

Я должен использовать boolean areEqual = false и вернуть его в конце.

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Вы возвращаете истину, как только найдете подходящую пару элементов, и никогда не обновляете areEqual.Вам нужно продолжать, пока вы не найдете пару элементов, которые не равны или не достигнут конца массива.

Вместо этого используйте переменную areEqual, чтобы сообщить вам,Вы нашли что-то - что угодно - что делает их неравными.Как только вы найдете что-то, что сделает их неравными, вам больше не нужно проверять:

boolean areEqual = false;  // Redundant assignment; but meh, if you've got to use this...
areEqual = arrayOne.length == arrayTwo.length;
for (int i = 0; areEqual && i < arrayOne.length; ++i) {
  areEqual = arrayOne[i] == arrayTwo[i];
}
return areEqual;
0 голосов
/ 12 октября 2018

@ Mayhem ответ правильный.Я просто хочу, чтобы вы показали вам более чистый способ (удалив вложенность if):

if (arrayOne.length != arrayTwo.length) {
  return false;
}

for (int i = 0; i < arrayOne.length; i ++) {
  if (arrayOne [ i ] != arrayTwo [ i ] ) {
    return false; 
  }
}
return true;
0 голосов
/ 12 октября 2018

Вместо немедленного возврата, когда они равны, проверьте неравенства и, если есть, то return false.Если цикл for завершается без возврата, тогда вы можете безопасно return true.

if (arrayOne.length == arrayTwo.length) {

    for (int i = 0; i < arrayOne.length; i ++) {

        if (arrayOne [ i ] != arrayTwo [ i ] ) {

            return false; 
        }

    }

    return true;

}
return false;
...