2012-04-16 3 views
1

:LinkedList의 자바 이송 및 인쇄

은 이미 자바를 사용하여 매우 표준적인 방법으로 사용자 정의 연결리스트 나 자신을 만들었습니다. 다음은 내 클래스는 다음과 같습니다

public class Node { 

    private Object obj; 
    private Node next; 

    public Node(Object obj){ 
     this(obj,null); 
    } 

    public Node(Object obj,Node n){ 
     this.obj = obj; 
     next = n; 
    } 

    public void setData(Object obj){ 
     this.obj = obj; 
    } 

    public void setNext(Node n){ 
     next = n; 
    } 

    public Object getData(){ 
     return obj; 
    } 

    public Node getNext(){ 
     return next; 
    } 

} 




public class linkedList { 
    private Node head; 


    public linkedList(){ 
     head = null; 
    } 

    public void setHead(Node n){ 
     head = n; 
    } 

    public Node getHead(){ 
     return head; 
    } 


    public void add(Object obj){ 
     if(getHead() == null){ 
      Node tmp = new Node(obj); 
      tmp.setNext(getHead()); 
      setHead(tmp); 
     }else{ 
      add(getHead(),obj); 
     } 
    } 


    private void add(Node cur,Object obj){ 
     if(cur.getNext() == null){ 
      Node tmp = new Node(obj); 
      tmp.setNext(cur.getNext()); 
      cur.setNext(tmp); 
     }else{ 
      add(cur.getNext(),obj); 
     } 
    } 


} 

임 내가

public static void main(String[] args) { 
     // TODO code application logic here 
     Node l = new Node("ant"); 
     Node rat = new Node("rat"); 
     Node bat = new Node("bat"); 
     Node hrs = new Node("hrs"); 

     linkedList lst = new linkedList(); 
     lst.add(l); 
     lst.add(rat); 
     lst.add(bat); 
     lst.add(hrs); 



     Node tmp = lst.getHead(); 
     while(tmp != null){ 

      System.out.println(tmp.getData()); 
      tmp = tmp.getNext(); 

     } 


    } 

다음과 같이 목록에 삽입했지만 내가 IDE에서 가져온 출력이

[email protected] 
[email protected] 
[email protected] 
[email protected] 

않는 이유는 값을 인쇄하려고 박쥐, 개미, 쥐 같은 문자열의 실제 값이 아니라 참조를 출력합니다 ...?

실제 값을 인쇄하려면 어떻게해야합니까?

당신에게

+0

이것은 제쳐두고,하지만 제네릭을 사용하지 않는 이유는 무엇입니까? –

+0

당신은 당신의 Node 클래스에 toString() 메소드를 추가 할 수 있습니다. 그러면 잘 인쇄 될 것입니다. – Kunal

답변

4

linkedList 클래스는 이미 Node을 생성합니다.

linkedList list = new linkedList(); 
list.add("foo"); 
list.add("bar"); 
Node tmp = lst.getHead(); 
while(tmp != null){ 
    System.out.println(tmp.getData()); 
    tmp = tmp.getNext(); 
} 

클래스는 개체 유형을 반환() 노드에

foo 
bar 
-1

LinkedList의는, 객체입니다 기준에서 toString 메소드 인쇄 개체 대단히 감사합니다. 당신은 당신이하고자하는 문자열을 인쇄 할 경우 두 문자열/제네릭에 LinkedList의 변경 또는 다음과 같이 인쇄를 쫓아 :

String output = (String)tmp.getData(); 
System.out.println(output); 

(당신이 원하는 경우에 당신이 한 줄에서이 작업을 수행 할 수 있습니다). 당신은 String를 저장하려고 알고있는 경우가, 또는

System.out.println(tmp); 

Node.getData() 돌려 String을 :

@Override 
String toString() { 
    String val = // however you want to represent your Node 
    return val; 
} 

와 노드를 인쇄 :

+0

'linkedList'는 그 자신의 클래스입니다. – Jeffrey

+0

@Jeffrey'LinkedList'는 그의 클래스 인'Node' 타입의 tmp입니다.'getData()'에 의해 반환 된) 노드의 데이터는'Object' 타입입니다. – twain249

+0

'java.util.LinkedList'에는'getHead' 메소드가 없습니다. 또한,'System.out.println ((Object) "hello")'는 객체에 대한 참조가 아니라'hello'를 출력합니다. 메서드 오버라이드가이를 처리합니다. – Jeffrey

1

당신은 NodetoString() 메소드를 오버라이드 (override) 할 필요가 s - Node 정의에서 ObjectString으로 변경하십시오.

또한, 노드 내부

UPDATE를 데이터의 유형을 지정하는 제네릭을 사용할 수

tmp.getData()은 (문자열을 반환해야합니다 : (의견에 의해 유발) 조금 더 생각 후에, 나는 뭔가 어긋 나서 참조 노드의 단일 매개 변수 ctor를 기반으로하고 문자열을 전달하는 경우) 출력은 Node 개체에 대한 참조입니다. linkedList.addNode의 obj 구성원을 Node으로 다시 설정하는 것이 가능합니까?

+0

@Jeffrey - 뭔가 어딘가에 틀림 없어 - 나를있을 수도 :) OP는'System.out.println (tmp.getData()); '는 참조를 인쇄하지만 그 문자열 (저장된 객체) 그러나 실제 출력물은'Node's가 인쇄되고 있음을 보여줍니다 ... – Attila

-1

귀하의 GetData의 인쇄됩니다. println()에 의해 올바르게 출력되도록 문자열로 캐스팅해야합니다.

System.out.println ((String) tmp.getData());

트릭을 수행해야합니다.

+0

println()에 객체를 전달하면 .toString()이 호출되고 String에 대해 String이 반환됩니다. 캐스팅이 도움이되지 않습니다. 그. – eckes

+0

지적 해 주셔서 감사합니다. 나의 나쁜, 나는 그것을 처음 시도해야했다. – akhil