2017-05-13 4 views
3

Ich versuche, meine BST in eine Textdatei zu schreiben, aber einige, wie es nicht funktioniert. Ich würde gerne wissen, wo ich versagt habe, denn ab sofort wird nichts mehr in die Datei geschrieben. Das Problem ist in der BinaryTree.java. Die display() Methode ist, wo ich versuche, die Elemente in Student.txt Datei zu platzieren.Warum wird mein BST nicht in eine Datei geschrieben?

Hier ist mein Node.java:

class Node { 
    Student data; 
    Faculty data2; 
    Node left; 
    Node right; 

    public Node(Student data) { 
     this.data = data; 
     this.left = left; 
     this.right = left; 
    } 

    public Node(Faculty data2) { 
     this.data2 = data2; 
     this.left = left; 
     this.right = right; 
    } 
} 

meine hier BinaryTree.java:

int index = 0; 
String[] sa = new String[index]; 

public void studentArray() { 
    studentArray(root,index); 
} 

public int studentArray(Node root, int index) {  
    if(root.left != null) { 
     index = studentArray(root.left, index); 
    } 
    sa[++index] = root.data.getLastName().toString(); 
    if(root.right != null) { 
     index = studentArray(root.right,index); 
    } 
    return index; 
} 

public void displayStudent(Node root) throws IOException { 
    if(root != null) { // If root isn't empty. 
     if(root.left != null) { 
      displayStudent(root.left); // Recursively display left nodes. 
     } 
     System.out.println(root.data.toString()); // Print to the console data that's in the root in order. 
     if(root.right != null) { 
      displayStudent(root.right); // Recursively display right nodes. 
     } 
    } 

    String file = "Student.txt"; 
    FileWriter fw = new FileWriter(new File(file)); 

    try { 
     for(index = 0; index < sa.length; index++) { 
      fw.write(sa[index] + " "); 
     } 
     fw.close(); 
    } catch(Exception e) { 
     System.out.println("File not found."); 
    } 
} 

meine hier Main.java:

import java.io.IOException; 

public class Main { 
    public static void main(String[] args) throws IOException { 
     Student student1 = new Student("Mike", "Piazza", "S3123456"); 
     Student student2 = new Student("Jack", "Jill", "S3123456"); 
     Student student3 = new Student("Alice", "Jones", "S3123456"); 

     BinaryTree bt = new BinaryTree(); 
     bt.insertStudent(student1); 
     bt.insertStudent(student2); 
     bt.insertStudent(student3); 
     bt.displayStudent(bt.root); 
    } 

Hier ist meine Student.txt Datei:

*displays nothing* 

Antwort

1

Java hat kein wachsende Array, so dass StudentArray nicht funktioniert.

Entweder Verwendung Rekursion:

try (PrintWriter out = new PrintWriter(file, "UTF-8")) { 
    print(out, root); 
} // automatically closes out 

void print(PrintWriter out, Node node) { 
    if (node != null) { 
     print(out, node.left); 
     out.println(...); 
     print(out, node.right); 
    } 
} 

Die Try-mit-Ressourcen ist sehr nützlich. Der Zeichensatz UTF-8 würde jedes Zeichen in den Namen der Schüler erlauben.

Alternative zu einem Array verwenden ArrayList:

List<String> sa = new ArrayList<>(); 

sa.add(root.data.getLastName().toString(); 

for (int i = 0; i < sa.size(); ++i) { // Old-style, if you need the index i 
    String s = sa.get(i); 
    ... 
    sa.set(i, s + s); 
} 

for (String s : sa) { 
    System.out.println(s); 
} 
+0

Danke für Ihre Antwort. Es ist sehr geschätzt: D! Können Sie bitte etwas mehr auf 'ArrayList' Teil erweitern? Insbesondere der 'sa.get (i)' -Teil und der 'for (s: sa) {' -Teil. Vielen Dank :). – bojack

+0

Erweitert die Antwort –

0

ich String verwenden würde vorschlagen Zeichenfolge für die Anzeige von Baumwert zu schaffen. Schreiben in Datei sollte in einer anderen Klasse sein, so dass es locker gekoppelt ist und in Feature je nach Art des Traversal-Typs wird es drucken. Wenn Sie in ein Array, dann müssen Sie überqueren, was die Komplexität erhöhen wird und auch werde ich bevorzugen Verwenden Sie iterative Weise. Meine Logik verwendet Pre-Order Traversal.

public String displayStudent(TreeNode root) { 
if (root == null) 
    return null; 
Stack <TreeNode> stack = new Stack <TreeNode>(); 
stack.push(root); 
StringBuilder sb = new StringBuilder(); 

while (!stack.isEmpty()) { 
    TreeNode h = stack.pop(); 
    if (h != null) { 
    sb.append(h.val + ","); 
    if (h.right != null) { 
    stack.push(h.right); 
    } 
    if (h.left != null) { 
    stack.push(h.left); 
    } 

    stack.push(h.left); 
    } 
} 

return sb.toString().substring(0, sb.length() - 1); 
} 
Verwandte Themen