Сравнение одного ArrayList с другим ArrayList с использованием логического метода в Java - PullRequest
0 голосов
/ 29 марта 2012

Я пытаюсь заставить логический метод возвращать истину или ложь, если две arrayLists равны друг другу.arraysLists - это array и array1.Пользователь вводит их.Прямо сейчас вот код, который я думал, будет работать:

public boolean equals(){
//if both are equal return true, else false
boolean test = false;
for(int i = 0; i < array1.size() && !test; i++){
    if(array1.get(i) == (array.get(i))){
        test = true;
    }       
}
return test;
  }

, за исключением того, что даже когда все числа arrayLists совпадают с другими числами arrayLists, возвращается false

Ответы [ 5 ]

1 голос
/ 29 марта 2012

Вам не нужно перезаписывать метод equals, поскольку для списков уже предусмотрен один, который делает именно то, что вам нужно.

Если вы настаиваете на том, чтобы написать его самостоятельно, в вашем коде есть простая ошибка,Поскольку вы инициализируете test как false, «&&! Test» позволяет вашему циклу существовать сразу при запуске.

Правильная версия будет:

public boolean equals(){
if(array.size()!=array1.size) return false; // test for different length
for(int i = 0; i < array1.size(); i++){
    if(!array1.get(i).equals(array.get(i))){
        return false;
    }       
 }
 return true;
}
0 голосов
/ 29 марта 2012

Вы должны просто «поменять» свой метод.Предположим, что массивы равны в первую очередь.Затем на каждой итерации следует проверять, отличается ли элемент.Если элемент отличается, тогда установите флаг «не равно».В псевдо-коде

boolean different = false;
for (each element of array 1) {
    if (element != element of array 2) different = true
    break;
}
0 голосов
/ 29 марта 2012

Вам нужно изменить свой код следующим образом:

public boolean equals(){
    if (array1.size() != array.size()) return false;

    for(int i = 0; i < array1.size(); i++){
        if(!array1.get(i).equals(array.get(i))){
            return false;
        }       
    }

    return true;
}

Во-первых, вы должны начать с test, равным true, и вернуть false, если вы найдете что-то, что не равно, потому чтоэто ясно показывает, что ArrayLists не равны.На самом деле вам вообще не нужна переменная test, поэтому я ее убрал.Просто верните false, если вы найдете что-то не равное.Если вы не найдете что-то не равное, оно никогда не вернет false и просто вернет true в конце.Во-вторых, вы должны использовать метод equals(), потому что ArrayLists используют класс Integer, а не примитив int, поэтому == проверит, являются ли они одним и тем же объектом, а не тем же числом.Наконец, для сравнения массивов разных размеров вы должны сравнить их размер и вернуть false, если они не одинакового размера, поскольку нет никакого способа, которым они могут быть равны.

0 голосов
/ 29 марта 2012

Думаю, что вы выполняете только один массив.Подумай, что там может пойти не так.Также взгляните на свою контрольную инструкцию.

Если вы внимательно следите за потоком кода, вы быстро поймете, почему ложно.

0 голосов
/ 29 марта 2012

двойное равенство (==) опасно.Вы на самом деле возвращаете объекты в своем коде, так что вам определенно следует использовать equals () вместо

...