簡體   English   中英

將 void 返回到文本文件的打印方法

[英]Printing method that returns void to a text file

問這個問題我感覺像個菜鳥,但是在我當前的驅動程序中,我已經使用迭代器成功地將樹的預排序打印到文本文件中。 我不知道如何打印我的遞歸方法,因為我不能將它們放入 println 語句中,因為它們是無效方法。 我知道我應該讓該方法將編寫器作為參數,但不知道該怎么做(驅動程序的最后幾個 println 語句)。 任何幫助表示贊賞!

司機:

package driver;

import java.io.*;
import java.util.*;

public class Driver {
    
    private static Scanner file;
    static PrintWriter outputFilePrinter;
    static Scanner inputFileScanner;

    public static void main(String[] args) throws FileNotFoundException {
       
        Scanner inFile; //Declaring scanner obj
        PrintWriter printWriter = new PrintWriter("output.txt"); //Text file where results are printed to
        inFile = new Scanner(new File("input.txt")); //Text file where student names and associated number are read from
        
        BinarySearchTreeInterface<String> aTree = new BinarySearchTree<>() {}; //Giving access to BinarySearchTree methods
      
        
        while (inFile.hasNext()) { //Scans input file
            String name = inFile.nextLine(); //Assigns contents to string obj
            aTree.add(name); //Add string to a tree
        } //End while
        
    
        Iterator<String> traverse = aTree.getPreorderIterator(); //Using iterator to print tree in an "postorder" fashion   
            while (traverse.hasNext())
        printWriter.println(traverse.next()); //Prints tree
        
        System.out.println("Postorder Recrusive: ");
        aTree.postorderTraverse();
        System.out.println("");
        System.out.println("Inorder Recursive: ");
        aTree.inorderTraverse();
     
        printWriter.close(); //Closes file
       
    } //End Main

} //End Driver

我試圖打印的遞歸方法:

    public void inorderTraverse() {
    inorderTraverse(root);
    }

    public void inorderTraverse(BinaryNode<T> node) {
        if (node != null) {
            inorderTraverse(node.getLeftChild());
            System.out.println(node.getData());
            inorderTraverse(node.getRightChild());
        }
    }

    public void postorderTraverse() {
        postorderTraverse(root);
    }

    public void postorderTraverse(BinaryNode<T> node) {
        if (node != null) {  
        postorderTraverse(node.getLeftChild());
        postorderTraverse(node.getRightChild());
        System.out.println(node.getData());
        }
    }

您可以將遍歷代碼更改為

public void inorderTraverse(PrintWriter printWriter) {
    inorderTraverse(root, printWriter);
}

public void inorderTraverse(BinaryNode<T> node, PrintWriter printWriter) {
    if (node != null) {
        inorderTraverse(node.getLeftChild(), printWriter);
        printWriter.println(node.getData());
        inorderTraverse(node.getRightChild(), printWriter);
    }
}

public void postorderTraverse(PrintWriter printWriter) {
    postorderTraverse(root, printWriter);
}

public void postorderTraverse(BinaryNode<T> node, PrintWriter printWriter) {
    if (node != null) {  
        postorderTraverse(node.getLeftChild(), printWriter);
        postorderTraverse(node.getRightChild(), printWriter);
        printWriter.println(node.getData());
    }
}

甚至

public void inorderTraverse(Consumer<T> consumer) {
    inorderTraverse(root, consumer);
}

public void inorderTraverse(BinaryNode<T> node, Consumer<T> consumer) {
    if (node != null) {
        inorderTraverse(node.getLeftChild(), consumer);
        consumer.accept(node.getData());
        inorderTraverse(node.getRightChild(), consumer);
    }
}

public void postorderTraverse(Consumer<T> consumer) {
    postorderTraverse(root, consumer);
}

public void postorderTraverse(BinaryNode<T> node, Consumer<T> consumer) {
    if (node != null) {  
        postorderTraverse(node.getLeftChild(), consumer);
        postorderTraverse(node.getRightChild(), consumer);
        consumer.accept(node.getData());
    }
}

並像這樣調用第二個變體:

aTree.postorderTraverse(printWriter::println);
aTree.postorderTraverse(System.out::println);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM