2016-11-03 7 views
0

Ich versuche, meine Add-Methode arbeiten, wie Sie aus meinem Code unter & sehen, es gibt mir enorme Schwierigkeiten herauszufinden, was mit meinem Code falsch ist.Erstellen meiner eigenen Warteschlange in Java mit Knoten

NodeFN Klasse:

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;} 
} 

Queue Klasse:

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

public Queue() {} // Default constructor. 

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. 
     if(nn == null) { // If the new node (nn) is empty. 
      head = nn; // Then allow head to equal to the new node(nn). 
     } else { 
      // If new node (nn) alphabetically comes first compared to head 
      if(nn.getData().compareTo(head.getData()) < 0) { 
       nn.setNext(head); 
       head = nn; 
      }  
     } 
    } 

public static void main(String[] args) { 
    Queue q = new Queue(); 
    q.add("some string to test to see if it prints in console"); 

    System.out.println(q); 
    } 
} 
+2

Objekte zu drucken, um sie zu debuggen, ist übrigens eine schlechte Übung. Sie sollten lernen, einen Debugger zu verwenden. –

+1

Führen Sie einen Schritt durch die Ausführung in einem Debugger und sehen Sie, was der Code, den Sie geschrieben haben, tatsächlich tut. Sie werden viel lernen, wenn Sie herausfinden, warum es das tut, was es tut (und nicht, was Sie dachten, es würde es tun). – Rob

+0

Wo bekomme ich einen Debugger? – pellepelle

Antwort

2

Lets hier beginnen:

NodeFN nn = new NodeFN(n); 
if(nn == null) { 

Diese beiden Linien zusammen Sinn nicht machen. In Java ist die erste Zeile garantiert, um etwas zurückzugeben, das nicht null ist. Das einzige, was passieren könnte, ist: der Konstruktor könnte eine Ausnahme auslösen, aber dann würden Sie nie die nächste Zeile erreichen.

Also: Sie sind nie gehen, um den "dann" Zweig Ihres if zu nehmen.

Dann:

if(nn.getData().compareTo(head.getData()) 

... wird nur funktionieren, wenn ... Kopf! = Null.

Aber Überraschung: aus Ihrem zwei Konstruktoren für die Queue-Klasse, nur der zweite sorgt dafür, Kopf ist! = Null.

Lange Rede, kurzer Sinn: So entsteht eine NullPointerException! Wenn Sie

Queue q = new Queue(); 

zu

Queue q = new Queue("whatever"); 

Ihr Beispiel ausfallen sollte nicht mehr ändern. Aber natürlich ist der Code dann immer noch fehlerhaft. Der Schlüssel zu beheben: Stellen Sie sicher, dass der Kopf initialisiert ist; und stellen Sie sicher, dass Sie gegen Null vergleichen ... in den Fällen, in denen Null möglich ist!

0

Sie sollten überprüfen, ob Kopf null ist:

if(head == null) { 
      head = nn; 
     } else { 
      ...  
     } 

dann sollten Sie auch diese betrachten sonst Zustand:

if(nn.getData().compareTo(head.getData()) < 0) { 
    nn.setNext(head); 
    head = nn; 
} 
else { 
    head.setNext(nn) 
} 

Schließlich sollten Sie die toString() Methode in Queue Klasse implementieren ..

0

Neuer Knoten wird ne du bist null, du hast es erfunden.

Verwandte Themen