3

だから私はJavaのかなりの初心者で、試験が近づいていて、一週間中練習しています。私の進歩はゆっくりですが、着実に進んでいます。私が行っている 1 つの演習では、配列計算の出力をtemperature.txtコンソールに出力し、コンソール出力と同じフォーマットでファイルを作成する必要があります。

私はどちらか一方を行う方法を理解しましたが、両方を行うのに問題があります (遅くて着実な学習者を思い出してください)。覚えておくべきより簡単な初心者の方法はありますか?

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;

public class Temperature {

    public static void main(String[] args) throws IOException{ 
        double[] temps = {100, 98, 80.5, 90.2, 99.4, 89.1};
        MaxMin(temps);

    }

    public static void MaxMin(double[]temps) throws IOException{
        FileWriter fwriter = new FileWriter("Temperatures.txt", true);
        PrintWriter outputfile = new PrintWriter(fwriter);
        double min= Double.MAX_VALUE;
        double max= Double.MIN_VALUE;
        double sum = 0;

        DecimalFormat formatter = new DecimalFormat("0.0");

        for(int i = 0;i<temps.length;i++){
            sum += temps[i];
            if(temps[i] > max){
                max = temps[i];
            }
            if(temps[i]< min){
                min = temps[i];
            }
        }

        double avg = sum / temps.length;
        outputfile.println("Average Temp: " + formatter.format(avg));
        outputfile.println("Maximum Temp: " + formatter.format(max));
        outputfile.println("Minimum Temp: " + formatter.format(min));
        outputfile.close();
    }
}

上記の内容はテキストを出力しますが、コンソールには何も出力しません。

編集:両方の要件を満たすために、最後に 3 つの System.out.println ステートメントを追加するだけでよいでしょうか? このような:

System.out.println("Average Temp: " + formatter.format(avg));
System.out.println("Maximum Temp: " + formatter.format(max));
System.out.println("Minimum Temp: " + formatter.format(min));

outputfile.println("Average Temp: " + formatter.format(avg));
outputfile.println("Maximum Temp: " + formatter.format(max));
outputfile.println("Minimum Temp: " + formatter.format(min));
outputfile.close();
4

5 に答える 5

4

Commons IO には、一度に 2 つの出力にすべてを書き込むTeeOutputStreamがあります。

于 2013-10-01T04:18:07.493 に答える
4

あなたの場合、最も簡単なのはメソッドを作成するoutputことです:

private void output(final String msg, PrintStream out1, PrintWriter out2) {        
    out1.println(msg);
    out2.println(msg);
}

そして、次のように使用します。

output("your message", System.out, outputfile);
于 2013-10-01T04:25:29.410 に答える
1

Log4jは、コンソールとファイルの追加のための信頼性が高く、高速で柔軟なロギング フレームワークです。

コンソールとファイルに一緒に追加するログの例!

于 2013-10-01T04:21:06.973 に答える
1

まず、コンソールとファイルの間でフォーマットが同一であることが重要な場合は、すべての出力を単一の に保存しString、文字などを埋め込んでから、一度にすべてを'\n'印刷/書き込みしStringます。

ファイルとコンソールの両方に同時に書き込む方法があるかどうかは、すぐにはわかりません。ただし、これらの両方を実行する関数をいつでも作成できます。

于 2013-10-01T04:17:06.180 に答える
0
    public static void MaxMin(double[] temps) throws IOException {
    FileWriter fwriter = new FileWriter("Temperatures.txt", true);
    PrintWriter outputfile = new PrintWriter(fwriter);
    double min = Double.MAX_VALUE;
    double max = Double.MIN_VALUE;
    double sum = 0;

    DecimalFormat formatter = new DecimalFormat("0.0");

    for (int i = 0; i < temps.length; i++) {
        sum += temps[i];
        if (temps[i] > max) {
            max = temps[i];
        }
        if (temps[i] < min) {
            min = temps[i];
        }
    }
    double avg = sum / temps.length;



    String str = "Average Temp: " + formatter.format(avg) + "\n"
            + "Maximum Temp: " + formatter.format(max) + "\n"
            + "Minimum Temp: " + formatter.format(min);
    System.out.println(str);
    outputfile.println(str);
    outputfile.close();

}

文字列を作成してから 2 回\n出力する、改行です

于 2013-10-01T04:24:18.050 に答える