2016-11-04 2 views
1

나는 왜 내 add()print() 방법이 작동하지 않는지 알아 내려고 노력했다. 나는 거의 모든 것을 시도했지만 나는 이것을 할 수 없다. 나는 내 코드가 잘못되었다는 것을 알고있다. (나는 새로운 것을 시도하기 위해 코드를 삭제했기 때문에 코드가 올바르다는 것을 알 수 없다) 그래서 무엇이 잘못 될 수 있는가?처음에 노드를 추가하는 동안 목록이 비어있는 이유는 무엇입니까?

시간을내어 읽어 주셔서 감사합니다.

NodeFN 클래스 :

public class NodeFN { 
    private String data; // Data for node. 
    private NodeFN next; // Next node. 

public NodeFN(String data) { 
    this.data = data; // Take the data value passed in & store it in the data field. 
    this.next = null; // Take the next node & store it in the next field. 
} 

    // Mutator functions. 
public String getData() {return data;} 
public NodeFN getNext() {return next;} 
public void setData(String d) {data = d;} 
public void setNext(NodeFN n) {next = n;} 
} 

큐 클래스 :

public class Queue { 
    NodeFN head; // Head of node. 
    public String n; 

public Queue(String n) { 
    head = new NodeFN(n); // head is now an object of NodeFN which holds a string. 
} 

public void add(String n) { 
    NodeFN nn = new NodeFN(n); // nn is now an object of NodeFN which holds a string, it should return something. 
     if(head == null) { 
      head = nn; 
     } 
     while(nn.getData().compareTo(head.getData()) < 0) { 
       nn.setNext(head); // Put node in beginning of the list. 
       nn.setData(n);  
     } 
    } 

public void print() { 
    NodeFN nn = new NodeFN(n); 

    while(nn != null) { 
     nn.getNext().getData(); 
     System.out.println(nn.getData() + " "); 
    } 
} 

public static void main(String[] args) { 
    Queue q = new Queue("string to test"); 
    q.add("another string to test if add method works."); 
    q.print(); 
} 
} 
+1

출력 코드 란 무엇이며 출력 할 내용은 무엇입니까? – dahui

+0

출력이 없습니다. 콘솔에 아무 것도 나타나지 않습니다. – g24

+0

@ g24 처음에'add()'에 전달 된 모든 노드를 추가하겠습니까? – progyammer

답변

0

추가 방법은 말할 수 없지만 여기에 n은 무엇입니까?

public void print() { 
    NodeFN nn = new NodeFN(n); 

    while(nn != null) { 
     nn.getNext().getData(); 
     System.out.println(nn.getData() + " "); 
    } 
} 

대기열 클래스는 public String n을 전혀 신경 쓰지 않아야합니다. head 노드 만 있으면됩니다.

그런 다음 nn.getNext().getData();이 반환합니다. 그렇습니까? 그러나, 당신은 그것을 인쇄하지 않고 당신은 앞으로 나아갈 것입니다. (nn을 다음 노드에 할당하지 마십시오.) 이

public void print() { 
    if (head == null) System.out.println("()"); 

    NodeFN tmp = head; 

    while(tmp != null) { 
     System.out.println(tmp.getData() + " "); 
     tmp = tmp.getNext(); 
    } 
} 

는 노드 목록의 시작에 추가해야 할 경우 같은

시도 뭔가, 다음이 작동합니다.

public void add(String n) { 
    NodeFN nn = new NodeFN(n); 
    if(head == null) { 
     head = nn; 
    } 

    // Don't use a while loop, there is nothing to repeat 
    if (n.compareTo(head.getData()) < 0) { 
     // Both these operations put 'nn' in beginning of the list. 
     nn.setNext(head); 
     head = nn; 
    } 
} 
+0

와우 .... 내가 잘못 생각했기 때문에 오늘 아침에 이것을 삭제했을 때 어젯밤에이'add()'메소드 코드를 가지고 있지 않았다. 물론, 내'print()'메소드가 꺼져 있었기 때문에 콘솔에서 아무것도 볼 수있는 방법이 없었습니다. 고마워, cricket_007. – g24

+0

환영합니다. 일반적으로, 나는 void'print' 메소드 대신에'toString' 메쏘드를 만들 겠지만, 당신이 원하는 것을 할 것입니다. –

+0

나는 그것을 고려할 것입니다, 나는 당신이 그것을 말하는 이유를 생각합니다. 다시 한번 감사드립니다. – g24

0

당신은 링크 된 목록을 작성하고 있습니다. 이를 인쇄하려면 getNext()에 널 (null)이 될 때까지 목록을 반복해야합니다. 기본적으로,이 같은 결과가 발생해야한다 : 당신의 add() 방법으로

public void print() { 
    NodeFN current = head; 

    while(current != null) { 
     System.out.println(current.getData()); 
     current = current.getNext(); 
    } 
} 

을, 아이디어는 기본적으로 목록의 마지막 노드의 next 기준으로 새로운 노드를 배치하는 것입니다. Queue 클래스의 last 노드에 대한 참조 만 유지하면됩니다. 추가 할 때 last 노드의 next을 새로 만든 노드에 설정하고 새 노드를 last으로 설정하십시오.

0

추가 방법은 시작하는 것이 좋습니다. 아직 목록에 요소가 없으면 머리를 nn으로 만드십시오. 그렇지 않으면 목록을 마지막 요소로 이동하여 끝에 추가합니다 (대기열이기 때문에).

public void add(String n) { 
    NodeFN nn = new NodeFN(n); 
    if(head == null) { 
     head = nn; 
    } 
    else { 
     NodeFN cursor = this.head; 
     while(cursor.getNext() != null) { 
      cursor = cursor.getNext(); 
     } 
     cursor.setNext(nn); 
    } 
} 

새로운 노드를 처음에 추가하려는 경우 (이상한 이유로) 더 쉽습니다.

public void add(String n) { 
    NodeFN nn = new NodeFN(n); 
    nn.setNext(this.head); 
    this.head = nn; 
} 

인쇄 방법. 실제 큐의 노드를 참조하도록 nn (커서)을 설정하지 않았습니다. nn을 큐의 헤드에 설정 한 다음 큐를 반복해야합니다. NodeFN nn = this.head. 그리고 while 루프의 본문에서 데이터 nn.getData()을 인쇄 한 후 다음 노드 nn = nn.getNext()으로 이동하십시오.

public void print() { 
    NodeFN cursor= this.head; 

    while(cursor != null) { 
     System.out.println(cursor.getData() + " "); 
     cursor= cursor.getNext();   
    } 
} 
관련 문제