3

所以我是java的一个相当大的菜鸟,我要考试了,整个星期都在练习。我的进步缓慢但稳定。我正在做的一个练习要求我将数组计算的输出打印到控制台并创建一个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 有一个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

首先,如果控制台和文件之间的格式相同很重要,那么我会将所有输出保存到一个String,嵌入'\n'字符等,然后String一次性打印/写入。

我不知道是否有一种同时写入文件和控制台的方法。不过,您总是可以编写一个函数来完成这两件事。

于 2013-10-01T04:17:06.180 回答
1

Log4j是一个可靠、快速和灵活的日志框架,用于控制台和文件附加。

将日志示例附加到控制台和文件一起!

于 2013-10-01T04:21:06.973 回答
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();

}

制作一个字符串然后打印两次,\n是换行符

于 2013-10-01T04:24:18.050 回答