2013-10-01 30 views
1

所以我是一個非常大的noob在Java和我有一個考試即將到來,並一直在練習整個星期。我的進展緩慢但穩定。我正在做的一項練習要求我將數組計算的輸出打印到控制檯,並使用控制檯輸出和相同的格式創建文件temperature.txt更簡單的方法來寫一個Java輸出到控制檯和文本文件?

我已經想出瞭如何能夠做到這一點或另一個,但我在做這兩個(有記住緩慢和穩定的學習者)有困難。有一個簡單的初學者的方法要記住?

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(); 
+0

使用日誌記錄。 Log4j for Java。控制檯和文本輸出在一個 –

+0

至於你是新的編輯,我會爲了可讀性做兩件事之一。我要麼將嵌入換行符的一個大字符串,以便您有一個控制檯打印和單個文件寫入,或者我將交替排列1和2寫入/打印Avg Temp,第3和4行寫入/打印最大溫度等。 – nhgrif

回答

1

首先,如果該格式是控制檯和文件之間是相同的,那麼我所有的輸出保存在一個String,嵌入'\n'人物和這樣的,然後很重要只需一次打印/寫入String

我不知道是否有同時寫入文件和控制檯的方法。你總是可以編寫一個函數來完成這些事情。

+0

大聲笑我從來沒有這樣想過。就我的問題而言,似乎有理由認爲systemout和printwriter 只是將這樣的system.out.println語句添加到結尾 – DarkD

4

Commons IO有一個TeeOutputStream,它將所有內容一次寫入兩個輸出。

+0

儘管對於工程問題這是一個很好的答案,但可能DarkD需要自己編寫它,如果是考試......所以看源代碼可能會比使用圖書館更好。 – Amadan

+0

對初學者有點矯枉過正,雖然 – epoch

0

Log4j是控制檯和文件追加的可靠,快速和靈活的日誌框架。

Logging Example追加在控制檯和文件togather上!

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是斷行

+0

很好回答很好!!!謝謝 – DarkD

+0

如果你想打印更多的一個字符串,我會使用時代的方式http://stackoverflow.com/a/19107954/2441561 – YAMM

2

你的情況,最簡單的就是創建一個output方法:

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

,並用它是這樣的:

output("your message", System.out, outputfile); 
相關問題