2013-11-14 3 views
0

Надеюсь, мое название объясняет, что я пытаюсь сделать. Я создал LinkedList:Справка по программе Palindrome: LinkedList объектов, содержащих массивы двойников.

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

Я Потом добавляется в список с помощью конструктора класса палиндром, который я создал:

//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; 

} 

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

Palindrome pal = new Palindrome(); 

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

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

ответ

0

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

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

Вам необходимо переопределить и использовать функцию равных в своем классе 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; 
} 
+0

Спасибо за ответ, теперь я понимаю, почему я получаю вывод, который я получаю сейчас. Не будет ли метод equals иметь периметр (ListIterator temp), так как я сравниваю два итератора. Прошу прощения, если это не имеет никакого смысла. Я все еще новичок со всем этим, поэтому мне трудно понять, что метод equals, который вы мне сделали. – user2994120

+0

Следующий \ предыдущий метод дает вам объект из вашего списка и не является объектом ListIterator. Метод equals по умолчанию сравнивает оба объекта hashcode. Функция equals, представленная мной, сравнивает значения для объектов, а не ее хэш-код. Я добавил оператор instanceof, чтобы проверить, что объект является объектом MyVector перед его литьем. – Myth1c

Смежные вопросы