2013-11-14 7 views
0

내 제목이 내가하려는 일을 설명하기를 바랍니다.Palindrome Program Help : 두 배의 배열을 포함하는 객체의 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); 
} 

내가 지금 포인터를 비교하는 방법을 만드는 오전을 나는 LinkedList의를 만들었습니다 "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"); 
    } 

답변

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)의 정수를 가지고 있지 않을까요? 두 개의 반복자를 비교하고 있기 때문입니다. 그게 말이되지 않으면 미안해. 나는 아직도 이것 전부를 가진 초심자이다 그래서 나는 당신이 저를하는 방법하는 무슨을 이해하는 거친 시간을 이해하고있다. – user2994120

+0

next \ previous 메서드는 ListIterator 객체가 아닌 목록의 객체를 제공합니다. 디폴트의 ​​equals 메소드는, 양쪽 모두의 오브젝트 해시 코드를 비교합니다. 내가 제공 한 equals 함수는 hashcode가 아닌 객체의 값을 비교합니다. 객체를 캐스팅하기 전에 MyVector의 인스턴스인지 확인하기 위해 instanceof 연산자를 추가했습니다. – Myth1c