Как распечатать результат метода типа void в файл с помощью Java PrintWriter

0

Вопрос

Я выполняю упражнения для своего курса программирования на Java, вопрос звучит так:

Напишите метод под названием printTree, который выводит в файл треугольник звездочек на основе значения высоты, переданного процедуре. Протестируйте этот метод в основном методе.

  • Например, треугольник высотой 3 должен выводиться в файл с именем file14:

Я просто не уверен, как записать возврат void в файл, который я сделал в основном методе. Я хотел бы свести к минимуму импорт любых других java.io методы, кроме пишущей машинки, но любая помощь приветствуется, спасибо.

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

Лучший ответ

3

Четыре замечания. System.out этоPrintStream (и вы могли бы пройти PrintStream к вашему методу). try-with-Resources позволяет исключить явные close() звонки. С помощью System.getProperty("user.home") позволяет записывать данные непосредственно в домашнюю папку (что может быть удобно). И использовать j < i вместо if (j < i) в вашей внутренней петле. Нравится,

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();
    }
}

Кроме того, начиная с 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

Лучший ответ-спасибо
Hovercraft Full Of Eels

Я не слишком хорошо разбираюсь в отправке объекта в качестве аргумента для методов, но я предполагаю, что аналогично другому ответу, это в основном делает его таким, что все "однолинейно": объявление файла, его имя. и затем, то, что он находится в потоке печати, делает его доступным для отправки в качестве аргумента? Я хотел бы услышать некоторые моменты ясности, мой курс находится на ранних стадиях написания файла, поэтому я хотел бы понять больше
Achor Gabriel

System.out этоPrintStream. Вы можете создать свой собственный PrintStream экземпляры. Чтобы написать в File. С помощью этого конструктора. Что касается отправки объекта в качестве аргумента, main(String[] args) (это самое первое, что вы делаете). Надеюсь, это поможет.
Elliott Frisch

@ElliottFrisch Спасибо тебе! Я думаю, что это в конечном итоге потребует дополнительной исследовательской работы с моей стороны, но я думаю, что меня направят в правильном направлении. Спасибо вам за этот главный факт заголовка, то, чего я не знал, но теперь знаю. Очень признателен
Achor Gabriel
-2

Вы могли бы решить эту проблему следующим образом

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;
    } 
}

Это несколько уродливый способ быстро решить эту проблему.

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

Я очень ценю ваш ответ! Я думаю, что я уйду от этого, хотя мне жаль, так как я действительно не знаю, как работать с PW в качестве параметра для дальнейшего использования. Однако спасибо, я вам очень признателен.
Achor Gabriel

На других языках

Эта страница на других языках

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