2016-12-01 4 views
0

Ich bin ein Anfänger Java-Schüler und habe eine Hausaufgabe, die mich erfordert, eine einfache BST mit Rekursion zu bauen. Sollte einfach sein, aber es gibt mir Ärger.Einfügen in eine BST, "Die Methode einfügen (myclass.TreeNode, int) ist nicht definiert für den Typ myclass"

Der Constructor Klasse und Methode main() sind mir zur Verfügung gestellt als

public static class TreeNode 
{ 
    TreeNode LeftLink; 
    int  Content; 
    TreeNode RightLink; 

} 
// end class TreeNode 

public static void main(String[] args) throws IOException 
{ 
    TreeNode T = null; 
    int  H, i; 

    T = BuildSearchTree(); 

    H = Height(T); 
    System.out.println("The number of nodes on the tree is " + NodeCount(T)); 
    System.out.println("The height of the tree is " + H); 
    for (i = 0; i <= H; i++) 
     System.out.println("The number of nodes on level " + i + " is " + CountLevel(T,i)); 
    // end for 
} 

Meine Aufgabe folgt, ist zu füllen eine BinarySearchTree Methode zu erstellen, ohne bereits zu modifizieren, etwas zu mir zur Verfügung gestellt.

Die Methode "BinarySearch Tree" fordert eine Datei an, die vom Benutzer mit Ganzzahlen gefüllt wird, und rekursiv eine BST daraus erstellt.

Mein Compiler (Eclipse) wird unter dem Titel meiner Einsatz Methode mir einen Fehler geben „Die Methode insert (myclass.TreeNode, int) ist nicht definiert für den Typen myclass“

Ich glaube, das ist etwas zu tun hat mit dem Weg T = BuildSearchTree(); ist in der Hauptmethode erklärt, aber ehrlich gesagt, ich habe keine Ahnung, was los ist.

Was ich bisher habe, ist

public static TreeNode BuildSearchTree() throws IOException { 

    Scanner Keyboard = new Scanner(System.in); 

    System.out.println("enter the name of your word file (please include ''.data'' or ''.txt'' when inputting file name) (number of words in the word file must be less than 30.)"); 

    String datafile = Keyboard.next(); 

    Scanner InputFile = new Scanner(new File(datafile)); 

    int[] data = new int[1000]; 

    while(InputFile.hasNext()){ 
     int i; 
     data[i]=InputFile.nextInt(); 
       i++; 
     } //end while 

    for(int i=0; i<1000; i++){ 
    TreeNode T = insert(T, data);} //end for 




    private static TreeNode insert(TreeNode node, int content) 
    { 


     if (node == null) 
     { 
      node.Content=content; 
     } 

     else if (content <= node.Content) 
      { 
       insert(node.LeftLink, content); 
      } 

     else 
      { 
       insert(node.RightLink, content); 
      }          
     } 
    return node; 
}//end insert method 

return T; 

}//end BuildSearchTree 
+0

Warum ist ' in 'BuildSearchTree' deklarieren? – 4castle

+0

Laut meinem Professor kann ich nur den Code in BuildSearchTree bearbeiten. Ich könnte die ganze Sache leicht selbständig machen, wenn ich meine Einfügemethode nach draußen stellen könnte. –

+0

Am Ende der BuildSearchTree-Methode fehlt eine geschlossene geschweifte Klammer. Ich würde * nicht * empfehlen, enge geschweifte Klammern an die Enden von Zeilen mit Code zu setzen, weil es die automatische Einrückung durcheinander bringt. Wenn Sie diese Klammer auf eine eigene Linie setzen und dann automatisch einrücken, ist dies einfacher zu sehen. – templatetypedef

Antwort

0

Java nicht verschachtelte Funktionen zulässt, so dass der Code BuildSearchTree beenden(), bevor Sie den Code für Insert Start().

Der Aufruf in T = insert(T, data); einfügen etwas wie T = insert(T, data[i]);

Sie benötigen sollten T außerhalb der Schleife zu erklären, wenn Sie es nach der Schleife verwenden möchten.

Sie können nicht davon ausgehen, dass die Datendatei weniger als 1000 Elemente enthält. Daher möchten Sie wahrscheinlich eine java.util.ArrayList anstelle eines Arrays verwenden. Sie müssen die Anzahl der Elemente aus der Datei tatsächlich in der Schleife um den eher einzufügen Aufruf gelesen verwenden, als die wörtliche Wert von 1000.

Ihre while-Schleife sollte so etwas wie:

ArrayList<Integer> data = new ArrayList<Integer>; 
    while(InputFile.hasNext()){ 
     data.add(InputFile.nextInt()); 
    } //end while 
    TreeNode T = new TreeNode(); 
    for(i=0; i<data.length(); i++){ 
     T = insert(T, data[i]); 
    } //end for 
    return T; 
Verwandte Themen