2016-12-23 5 views
0

Was auch immer ich versuche lösen mit der Linie bTree.binaryTree[i].Data=in.nextLine(); in Framework-Klasse Ergebnisse inkann nicht java.lang.NullPointerException

Geben Sie die Anzahl der Knoten im Binary Tree zu tun: Ausnahme in thread „main "java.lang.NullPointerException zum Knoten # 0 bei binaryTree.framework.intialize (framework.java:19) Geben Sie Daten: bei binaryTree.main.main (main.java:9) Prozess beendet mit Exit-Code 1

Gith ub Kern: https://gist.github.com/D-codex/0051d59abb91fafc73fbec0fa7dad356

EDITED: https://gist.github.com/D-codex/009a5afa391c760b7ecc88f8109662c0 (nach folgenden GhostCat Vorschlag)

Ich habe mein Bestes getan, fast alles zu initialisieren ‚Null‘ überall zu vermeiden, aber diese Ausnahme immer wieder erscheint

Knoten Klasse

package binaryTree; 
import java.util.*; 

public class node { 
boolean hasLeft,hasRight; 
boolean isRootPrimary,isRoot; 
String Data; 
String nodeID,leftNodeID,rightNodeID,parentID; 
int childrenNodeCount; 
node(){ 
    hasLeft=false; 
    hasRight=false; 
    Data=""; 
    childrenNodeCount=0; 
} 
void check(){ 
    if(hasLeft||hasRight) 
     isRoot=true; 
} 
String fetchRoot(){ 
    return parentID; 
} 
String fetchID(){ 
    return nodeID; 
} 
String fetchSiblingID(){ 
    return "("+String.valueOf(leftNodeID)+" "+String.valueOf(rightNodeID)+")"; 
} 
} 

Tree-Klasse

package binaryTree; 
import java.util.*; 


public class Tree extends node{ 
node binaryTree[]; 
int count;int rootID,height,depth; 
String siblingPairs,leaves; 
Tree(int count){ 
    binaryTree=new node[count]; 
    this.count=count; 
    rootID=0; 
    height=0;depth=0; 
} 
void finalise(){ 
    for(int i=0;i<count;i++){ 
     if(binaryTree[i].childrenNodeCount==0) 
      leaves=String.valueOf(binaryTree[i].fetchID()); 
     if(binaryTree[i].childrenNodeCount==2){ 
      siblingPairs=binaryTree[i].fetchSiblingID(); 
     } 
    } 
    StringTokenizer st=new StringTokenizer(leaves); 
    while(st.hasMoreElements()){ 
     int counter=0; 
     int leafID=Integer.valueOf(st.nextToken()); 
     node temp=binaryTree[leafID]; 
     while(temp.isRootPrimary){ 
      temp=binaryTree[Integer.valueOf(temp.fetchRoot())]; 
      counter=counter+1; 
     } 
     if(counter>height) { 
      height = counter; 
      depth=height-1; 
     } 
    } 
} 
} 

Framework-Klasse

package binaryTree; 
import java.util.*; 


public class framework { 
public Tree intialize(){ 
    System.out.print("Enter the Number of Nodes in the Binary Tree :"); 
    Scanner in=new Scanner(System.in); 
    int count=in.nextInt(); 
    Tree bTree=new Tree(count); 
    int ID=0;int i=0; 
    while(i<count){ 
     System.out.println("Details for node#"+i); 
     System.out.print("Enter Data :"); 
     bTree.binaryTree[i].Data=in.nextLine(); 
     bTree.binaryTree[i].nodeID=String.valueOf(ID); 
     if(i!=0){ 
      boolean flag = true; 
      while (flag) { 
       String parentID=""; 
       System.out.print("Enter the node's Parent:"); 
       parentID = in.nextLine(); 
       if  (bTree.binaryTree[Integer.valueOf(parentID)].childrenNodeCount >= 2) { 
        System.out.println("Parent Node is Full"); 
       } 
       else { 
        bTree.binaryTree[i].parentID = in.nextLine(); 
        bTree.binaryTree[Integer.valueOf(parentID)].childrenNodeCount=bTree.binaryTree[Integer.valueOf(parentID)].childrenNodeCount+1; 
        flag=false; 
       } 
      } 
      System.out.print("Is the node Parent's Left?"); 
      String temp=in.next(); 
      if(temp.equalsIgnoreCase("yes")||temp=="1"||temp.equalsIgnoreCase("y")){ 
       bTree.binaryTree[Integer.valueOf(bTree.binaryTree[i].parentID)].hasLeft=true; 
       bTree.binaryTree[Integer.valueOf(bTree.binaryTree[i].parentID)].leftNodeID=bTree.binaryTree[i].nodeID; 
      } 
      else { 
       bTree.binaryTree[Integer.valueOf(bTree.binaryTree[i].parentID)].hasRight = true; 
       bTree.binaryTree[Integer.valueOf(bTree.binaryTree[i].parentID)].rightNodeID=bTree.binaryTree[i].nodeID; 
      } 
     } 
     else 
      bTree.binaryTree[i].isRootPrimary=true; 
     bTree.binaryTree[i].check(); 
     i=i+1;ID=ID+1; 
    } 
    bTree.finalise(); 
    return bTree; 
} 
public void displayAll(Tree bTree){ 
    System.out.println("Running a Full Analysis on the Binary Tree"); 
    System.out.println("Printing nodes Details"); 
    for(int i=0;i<bTree.count;i++){ 
     System.out.println("Node #"+i); 
     System.out.println("PrimaryRoot     :"+bTree.binaryTree[i].isRootPrimary); 
     System.out.println("isRoot      :"+bTree.binaryTree[i].isRoot); 
     System.out.println("Data      :"+bTree.binaryTree[i].Data); 
     System.out.println("Number of Children Nodes :"+bTree.binaryTree[i].childrenNodeCount); 
     System.out.println("hasLeft      :"+bTree.binaryTree[i].hasLeft); 
     if(bTree.binaryTree[i].hasLeft) 
      System.out.println("LeftNodeID     :"+bTree.binaryTree[i].leftNodeID); 
     System.out.println("hasRight     :"+bTree.binaryTree[i].hasRight); 
     if(bTree.binaryTree[i].hasRight) 
      System.out.println("RightNodeID    :"+bTree.binaryTree[i].rightNodeID); 
     System.out.println("parentID     :"+bTree.binaryTree[i].fetchRoot()); 
     System.out.println("SiblingPairs (if any)  :"+bTree.binaryTree[i].fetchSiblingID()); 
     System.out.println("____________________________________________________________________________"); 
    } 
    System.out.println("Tree Specifications"); 
    System.out.println("Total No. of Nodes    :"+bTree.count); 
    System.out.println("Height of Tree     :"+bTree.height); 
    System.out.println("Depth of Tree     :"+bTree.depth); 
    System.out.println("Leaves       :"+bTree.leaves); 
    System.out.println("Sibling Pairs     :"+bTree.siblingPairs); 
} 
} 

Hauptklasse

package binaryTree; 

public class main { 
public static void main(String Args[]){ 
    framework Framework=new framework(); 
    Tree binaryTree=Framework.intialize(); 
    Framework.displayAll(binaryTree); 
} 
} 
+5

Mögliche Duplikate von [Was ist eine NullPointerException, und wie behebe ich es?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) –

+0

Befolgen Sie die Java Namenskonventionen, wenn Sie nicht wissen, gehen Sie und lesen Sie es. –

+0

Danke für die schnelle Annahme. Wenn ich nächste Woche etwas Zeit finde, werde ich ein paar Vorschläge für dich machen. – GhostCat

Antwort

1

Ihr Problem ist hier:

binaryTree=new node[count]; 

Das schafft nur ein neue aber leer Array.

Sie müssen zuerst dieses Array iterieren und ein Node-Objekt in jeden Slot einfügen!

Außerdem: Sie möchten über Java Coding Style Guides lesen. Klassennamen beginnen immer zum Beispiel mit Großbuchstaben.

+0

versuchte Ihren Vorschlag jetzt kann ich das Programm zum Laufen bringen Es ist seltsam ... das neue Programm ist bei https://gist.github.com/D-codex/009a5afa391c760b7ecc88f8109662c0 und es ergibt sich die Ausgabe als Geben Sie die Anzahl der Knoten im Binärbaum ein: 3 Details für Knoten # 0 Geben Sie Daten ein: Details für Knoten # 1 Geben Sie ein Daten: Den Dateneintrag des ersten Knotens vollständig überspringen ... –

+0

Das ist keine Überraschung. Entschuldigung, aber dein Code ist ein riesiges Chaos an komischem Code. Aber das ist keine Seite, auf der wir Ihren unordentlichen Code für Sie debuggen. Vielleicht werde ich später nachsehen ... Aber das könnte Dienstag bedeuten ... – GhostCat

+0

Danke für deine Mühe. Ich habe den Fehler gefunden und es ist gut und läuft jetzt;). –

1

Der Fehler am Ort war, wo man den Baum Objekt bTree.binaryTree[i].data zugreifen, Sie versuchen, die für den Zugriff auf Eigenschaft von null.

System.out.println("Details for node#"+i); 
System.out.print("Enter Data :"); 
//bTree.binaryTree[i] = new Tree(i); //uncomment this line its will work 
bTree.binaryTree[i].Data=in.nextLine(); bTree.binaryTree[i] is null or not initialized. 
bTree.binaryTree[i].nodeID=String.valueOf(ID); 

Hier in diesem Fall, dass Sie ein Array der Objekte erstellt, aber das Array ist nicht mit irgendwelchen Gegenständen, Zugang solcher Orte werden in Nullpointer am Ende gefüllt. Erstellen Sie ein Objekt mit dem Operator new, und weisen Sie es dem Standort binaryTree[i] zu. Anschließend können Sie auf die Daten zugreifen.

+0

bTree.binaryTree [] wird bereits in der Tree-Klasse initialisiert. Die Daten für den Knoten werden im Contructor des Knotens initialisiert. –

+0

hast du deinen Code @Kiran Kumar es gibt 'Exception im Thread" main "zurück java.lang.ArrayIndexOutOfBoundsException: 0' –

+0

Ja, ich weiß, aber ich führe ihn darüber, warum die NullPointerException vorkam, das ist es, ich mache mir keine Sorgen über seine Logik. –

Verwandte Themen