Справка по программе Palindrome: LinkedList объектов, которые содержат массивы двойников.

Надеюсь, мой титул объясняет, что я пытаюсь сделать. Я создал LinkedList:

private LinkedList<MyVector> list = new LinkedList();

Затем я добавил в список, используя конструктор класса Palindrome, который я создал:

//creates arrays of doubles inside of MyVector Objects.
public Palindrome(){

    double[] a1 = {3.0, 4.0, 3.0};
    double[] a2 = {3.5, 4.5, 3.5};

    MyVector a = new MyVector(a1);
    MyVector b = new MyVector(a2);
    MyVector c = new MyVector(a1);
    MyVector d = new MyVector(a2);
    MyVector e = new MyVector(a1);
  //adds the MyVector Objects into the LinkedList  
    list.add(a);
    list.add(b);
    list.add(c);
    list.add(d);
    list.add(e);
}

Сейчас я создаю метод, который будет сравнивать указатели двух разных итераторов списка через список объектов "MyVector":

public boolean isPalindrome(){

     //iterates through LinkedList From Beginning to End  
     ListIterator<MyVector> itr1 = list.listIterator();

     //iterates through LinkedList from End to Beginning
     ListIterator<MyVector> itr2 = list.listIterator(list.size());


     while (itr1.next() == itr2.previous()){
            return true;
        }

    return false;

}

Моя проблема заключается в том, что когда я создаю новый объект Палиндром в методе main, а затем проверяю, действительно ли Список объектов является палиндромом, я всегда получаю вывод, что "Список не является палиндромом" (Когда я специально сделал объекты в списке для представления палиндрома для моего теста, если вы посмотрите на мой конструктор палиндрома):

Palindrome pal = new Palindrome();

    if(pal.isPalindrome()){
        System.out.println("It's a palindrome");

    } else {
        System.out.println("It's not a palindrome");
    }

1 ответ

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

int hash1 = itr1.next().hashCode();
int hash2 = itr2.previous().hashCode();

Вам нужно переопределить и использовать функцию equals в вашем классе MyVector, чтобы это работало.

@Override
public boolean equals(Object other)
{
    boolean retVal = true;
    if(other instanceof MyVector)
    {
        MyVector otherVector = (MyVector) other;
        if(this.x != otherVector.x)
        {
            retVal = false;
        }
        if(this.y != otherVector.y)
        {
            retVal = false;
        }
        if(this.z != otherVector.z)
        {
            retVal = false;
        }
    }
    else
    {
        retVal = false;
    }

    return retVal;
}
Другие вопросы по тегам