Como imprimir o resultado de um tipo void método em um arquivo com o Java PrintWriter

0

Pergunta

Eu estou fazendo o exercício de trabalho para a minha programação em Java curso, a questão vai assim:

Escrever um método chamado printTree que as saídas para um ficheiro de um triângulo de asteriscos com base no valor de altura passado para o procedimento. Testar este método o método principal.

  • E. g. Triângulo de altura 3 deve a saída para um arquivo chamado file14:

Eu não tenho certeza de como escrever o retorno void para o arquivo que eu fiz no método main. Gostaria de minimizar a importação de qualquer outra java.io métodos além de FileWriter, mas qualquer ajuda é bem-vinda, Obrigado.

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

Melhor resposta

3

Quatro observações. System.out é um PrintStream (e você poderia passar uma PrintStream seu método). try-with-Resources permite eliminar explícita close() chamadas. Usando System.getProperty("user.home") permite-lhe escrever para a pasta raiz diretamente (o que pode ser útil). E usar j < i em vez de if (j < i) em seu loop interno. Como,

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

Além disso, como 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

Melhor resposta-obrigado
Hovercraft Full Of Eels

Eu não estou muito bem versado com o envio de um objeto como um argumento para métodos, mas eu estou supondo que a outra a resposta, essa, basicamente, faz-lo de modo que todos os seus "um-alinhado": declarando o arquivo, nomeando-o. e, em seguida, que seja em um fluxo de impressão faz tão sua enviável como um argumento? Eu adoraria ouvir alguma clareza os pontos, Meu curso é f na fase inicial da escrita para o arquivo para que eu adoraria entender mais
Achor Gabriel

System.out é um PrintStream. Você pode construir seu próprio PrintStream instâncias. Para escrever um File. Com esse construtor. Como para o envio de um objeto como um argumento, main(String[] args) (é a primeira coisa que você faz). Espero que ajude.
Elliott Frisch

@ElliottFrisch Obrigado! Eu acho que isso vai acabar exigindo mais trabalho de investigação sobre o meu fim, mas, eu acho que eu vou ser guiado na direção certa. Muito obrigado por esse cabeçalho principal fato, algo que eu não sei, mas agora não. Muito apreciada
Achor Gabriel
-2

Você pode resolvê-lo como este

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

Este é um pouco feio maneira de resolvê-lo rapidamente.

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

Eu aprecio muito a sua resposta! Eu acho que estou indo para desviar-se de que este desculpe, como eu realmente não sei como trabalhar com o PW como um parâmetro para referência futura. Obrigado, porém, muito apreciado.
Achor Gabriel

Em outros idiomas

Esta página está em outros idiomas

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