2014-03-19 2 views
1

나는 Linked List를 더 잘 이해하기 위해 연습을하고 있습니다.링크 된 목록에 추가 참조 개체가있는 이유는 무엇입니까?

내 출력된다 :
*** DISPALY 명칭 미키 널 Arek 널 동방 널


문제점 : 이름 사이 표시 널.

시도 : 많은 수의 인쇄 문을 써서 추가 Name 참조 개체를 목록에 추가하는 것처럼 보입니다. 나는 add 메소드에서 오류를 찾고자했지만 논리적으로는 모든 것이 나에게 벌금이된다.

LinkedList API를 사용할 수 없습니다.

도움 주셔서 감사합니다.

<pre> <code> 
public class NameTest { 

public static void main(String[] args) { 
    NameList<Name> n = new NameList<Name>(); 
    Name n1 = new Name(1,"Miki"); 
    Name n2 = new Name(2, "Arek"); 
    Name n3 = new Name(3, "Magi"); 

    n.addName(n1); 
      n.addName(n2); 
      n.addName(n3); 
    n.displayNames(); 
    System.out.println("*******************\n"); 
    } 
} 

public class Name { 

private int nameId; 
private String firstName; 
private Name next; 

public Name() { } 

public Name(int nameId, String firstName) { 
    super(); 
    this.nameId = nameId; 
    this.firstName = firstName; 
    this.next = new Name(); 
} 

public int getNameId() { 
    return nameId; 
} 

public void setNameId(int nameId) { 
    this.nameId = nameId; 
} 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public Name getNext() { 
    return next; 
} 

public void setNext(Name next) { 
    this.next = next; 
} 
} 

public class NameList<T extends Name> { 

private T head; 
private int value; 

public NameList() { 
    head = null; 
    value = 0; 
} 

public T getHead() { 
    return head; 
} 

public void setHead(T head) { 
    this.head = head; 
} 

public void addName(T name) { 
    if(head == null) { 
     setHead(name); 
     value++; 
    } 
    else {  
     T curr = getHead(); 
     while(curr.getNext() != null) { 
      curr = (T) curr.getNext(); 
     } 
     curr.setNext(name); 
     value++; 
    } 
} 

public void displayNames() { 
    System.out.println("***DISPLAY NAMES "); 
    T curr = getHead(); 

    while(curr.getNext() != null) { 
     System.out.println(curr.getFirstName()); 
     curr = (T) curr.getNext(); 
    } 
    if(curr.getNext() == null) { 
     System.out.println(curr.getFirstName()); 
    } 
} 
다음 클래스 이름이 같아야합니다

인스턴스 변수 : 다음 개인 이름; 혼란 스럽습니다. 위의 코드에서 수정했습니다.

답변

2

문제는이 줄입니다.

this.next = new Name(); 

당신은 당신이 추가 할 때마다 Name의 뒷면에 새로운 "빈 객체"를 추가하고 있습니다. 그것을 제거하면 원하는 결과를 얻을 수 있습니다. (나는 당신도 어딘가에 Name extends Employee을 가지고 있다고 가정하고, 그렇지 않으면 컴파일되지 않는다).

+0

감사합니다. 클래스 이름에서 인스턴스 변수 next는 다음과 같아야합니다. private Name next; 혼란 스럽습니다. 위의 코드에서 수정했습니다. 아마도 재미있는 질문이지만 어떻게 오버로드 된 생성자에서 "next"를 인스턴스화해야합니까? 나는 단지 하나의 아이디어를 가지고 있지만 그것이 올바른지는 잘 모르겠다. next = null; – user1282256

+1

'next = null; '이라고 쓸 수는 있지만 그렇게 할 필요는 없습니다. 객체 유형의 인스턴스 변수는 항상 null로 기본 설정됩니다. –

관련 문제