Jak wydrukować wynik metody typu void do pliku za pomocą Java PrintWriter

0

Pytanie

Wykonuję ćwiczenia do kursu programowania w języku Java, pytanie brzmi tak:

Napisz metodę pod nazwą printTree, który wyświetla plik w trójkąt gwiazd na podstawie wartości wysokości otrzymane procedurze. Przetestuj ten metoda jest w zasadzie metodzie.

  • Na przykład, trójkąt o wysokości 3 powinien pojawić się w pliku o nazwie file14:

Ja po prostu nie wiem, jak zapisać zwrot void w plik, który zrobiłem w zasadzie metodzie. Chciałbym zminimalizować import innych java.io metody, oprócz maszyny do pisania, ale każda pomoc jest mile widziane, dziękuję.

import java.io.PrintWriter;

public class OutputToFile14 {

    public static void main(String[] args) throws Exception{
        
        //Creating PrintWriter
        PrintWriter output = new PrintWriter("file14.txt");
        
        //writing method output to file
        output.write(printTree(4));
        
        //saving file
        output.close();
    }

    public static void printTree (int height) throws IOException{
        
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < height; j++) {
                if (j < i) {
                    System.out.print("*");
                }
            }
            System.out.println();
        }
    } 
}
call file java methods
2021-11-24 02:22:55
2

Najlepsza odpowiedź

3

Cztery uwagi. System.out toPrintStream (i można przejść PrintStream do metody). try-with-Resources pozwala wykluczyć wyraźne close() połączenia telefoniczne. Z pomocą System.getProperty("user.home") pozwala zapisywać dane bezpośrednio w katalogu domowym (co może być przydatne). I używać j < i zamiast if (j < i) w swojej wewnętrznej pętli. Podoba

public static void main(String[] args) throws Exception {
    try (PrintStream output = new PrintStream(
            new File(System.getProperty("user.home"), "file14.txt"))) {
        printTree(output, 4);
    }
}

public static void printTree(PrintStream out, int height) throws IOException {
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < i; j++) {
            out.print("*");
        }
        out.println();
    }
}

Ponadto, począwszy od wersji Java 11,

public static void printTree(PrintStream out, int height) throws IOException {
    for (int i = 0; i < height; i++) {
        out.println("*".repeat(i)); // You might want "*".repeat(1 + i)
    }
}
2021-11-24 02:40:07

Najlepsza odpowiedź-dziękuję
Hovercraft Full Of Eels

Nie jestem zbyt dobra w wysyłaniu obiektu jako argument do metody, ale zakładam, że podobnie innej odpowiedzi, to w zasadzie sprawia, że jest tak, że wszystkie "однолинейно": ogłoszenie pliku, jego nazwę. i następnie, to, że znajduje się w strumieniu druku, czyni go dostępnym dla wysyłania jako argument? Chciałbym usłyszeć niektóre chwile jasności, mój kurs znajduje się na wczesnych etapach pisania pliku, więc chciałbym się dowiedzieć więcej
Achor Gabriel

System.out toPrintStream. Możesz stworzyć swój własny PrintStream egzemplarze. Aby napisać w File. Za pomocą tego projektu. Co do wysyłania obiektu jako argumentu, main(String[] args) (to jest pierwsze, co robisz). Mam nadzieję, że to pomoże.
Elliott Frisch

@ElliottFrisch Dziękuję ci! Myślę, że to w końcu będzie wymagało więcej pracy badawczej z mojej strony, ale myślę, że mnie wyślą w dobrym kierunku. Dziękuję za ten ważny fakt nagłówka, coś, czego nie wiedziałem, ale teraz wiem. Bardzo wdzięczny
Achor Gabriel
-2

Można rozwiązać ten problem w następujący sposób

import java.io.PrintWriter;

public class OutputToFile14 {

    public static void main(String[] args) throws Exception{
        
        //Creating PrintWriter
        PrintWriter output = new PrintWriter("file14.txt");
        
        //writing method output to file
        output.write(printTree(4));
        
        //saving file
        output.close();
    }

    public static String printTree (int height) throws IOException{
        String output = "";
        
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < height; j++) {
                if (j < i) {
                    System.out.print("*");
                    output += "*";
                }
            }
            System.out.println();
            output += "\r\n";
        }
        return output;
    } 
}

To kilka brzydki sposób, aby szybko rozwiązać ten problem.

import java.io.PrintWriter;

public class OutputToFile14 {

    public static void main(String[] args) throws Exception{
        
        //Creating PrintWriter
        PrintWriter output = new PrintWriter("file14.txt");
        
        //writing method output to file
        //output.write(printTree(4));
        printTree(4, output);
        
        //saving file
        output.close();
    }

    public static void printTree (int height, PrintWriter pw) throws IOException{
        
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < height; j++) {
                if (j < i) {
                    System.out.print("*");
                    pw.write("*");
                }
            }
            System.out.println();
            pw.write("\r\n");
        }
    } 
}
2021-11-24 02:35:23

Doceniam twoją odpowiedź! Myślę, że odejdę od tego, chociaż mi szkoda, ponieważ naprawdę nie wiem, jak pracować z PW jako parametr do dalszego wykorzystania. Jednak dziękuję, jestem ci bardzo wdzięczny.
Achor Gabriel

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................