Справка по программе 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;
}