3

私のオンラインコンピュータサイエンスのクラスでは、太陽系の各惑星の表面重力を決定するプログラムを作成する必要があります。私はそれのほとんどすべての側面を1つを除いて機能するようになりました。別の方法を使用して、表面重力をファイルに書き込む必要があります。これは私の現在の方法です:

public static void writeResultsToFile(double g) throws IOException{

    PrintWriter outFile = new PrintWriter(new File("planetaryData.txt"));

    outFile.printf("%.2f%n", g);
    outFile.close();
}

私の問題は、ファイルに書き込むときに以前の値が上書きされることです。すべての値を含めるにはどうすればよいですか。それが役立つ場合は、これが私のコード全体です:

import java.util.Scanner;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.File;


public class gravityV1 {

    /**
     * @param args
     */

    public static double calculateSurfaceGravity(double d, double M){
        double G = 6.67 * Math.pow(10, -11);
        double r = d;
        double g;

        g = G * M/Math.pow(r/2*1000, 2);

        return g;
    }

    public static void printResultsToScreen(String planetName, double diameterKm, double massKg, double g){

        System.out.printf("%-15s%-17.0f%-17.2e%.2f%n", planetName, diameterKm, massKg, g);

    }

    public static void writeResultsToFile(double g) throws IOException{

        PrintWriter outFile = new PrintWriter(new File("planetaryData.txt"));

        outFile.printf("%.2f%n", g);
        outFile.close();
    }

    public static void main(String[] args) throws IOException {
        // Variables
        String [] planetName = new String[8];
        planetName[0] = "Mercury";
        planetName[1] = "Venus  ";
        planetName[2] = "Earth  ";
        planetName[3] = "Mars   ";
        planetName[4] = "Jupiter";
        planetName[5] = "Saturn ";
        planetName[6] = "Uranus ";
        planetName[7] = "Neptune";
        double [] diameterKm = new double[8];
        diameterKm[0] = 4880;
        diameterKm[1] = 12103.6;
        diameterKm[2] = 12756;
        diameterKm[3] = 6794;
        diameterKm[4] = 142984;
        diameterKm[5] = 120536;
        diameterKm[6] = 51118;
        diameterKm[7] = 49532;
        double [] massKg = new double[8];
        massKg[0] = 3.30 * Math.pow(10, 23);
        massKg[1] = 4.869 * Math.pow(10, 24);
        massKg[2] = 5.97 * Math.pow(10, 24);
        massKg[3] = 6.4219 * Math.pow(10, 23);
        massKg[4] = 1.900 * Math.pow(10, 27);
        massKg[5] = 5.68 * Math.pow(10, 26);
        massKg[6] = 8.683 * Math.pow(10, 25);
        massKg[7] = 1.0247 * Math.pow(10, 26);
        double [] g = new double[8];
        int array = 0;

        //code

        System.out.printf("%s%20s%15s%15s%n", "Planet", "Diameter (km)", "Mass (kg)", "g (m/s^2)");

        for(double d : diameterKm){
            g[array] = calculateSurfaceGravity(d, massKg[array]);
            printResultsToScreen(planetName[array], d, massKg[array], g[array]);
            writeResultsToFile(g[array]);
            array++;
        }
    }

}
4

4 に答える 4

11

追加モードでPrinterWriter作業を作成するには、これを行います。FileWriter

PrintWriter outFile = new PrintWriter(new FileWriter("planetaryData.txt", true)); 
于 2013-01-21T17:09:50.483 に答える
1

Mkyongのチュートリアルから:

FileWriter、ファイルに文字を書き込むための文字ストリーム。デフォルトでは、既存のすべてのコンテンツが新しいコンテンツに置き換えられますが、FileWriterコンストラクターの2番目の引数としてtrue(ブール)値を指定すると、既存のコンテンツが保持され、ファイルの最後に新しいコンテンツが追加されます。 。

あなたは次のようなものを使うことができます-

    PrintWriter outputFile = new PrintWriter(new FileWriter(file, true));
于 2013-01-21T17:11:32.037 に答える
0

2つの問題:

1)毎回ファイルを上書きしています。 printResultsToFile1つのデータムだけでなく、配列全体を取る必要があります。ループの外側から呼び出します。

2)簡潔にするために、浮動小数点数を2.08e24として入力することを検討してください。

private void printResultsToFile(double result[]) {
  PrintWriter pw = new PrintWriter(new FileWriter("planetaryData.txt"));
  for (int i=0; i< result.length; i++) {
    pw.printf("%.2f%n", result[i]);
  }
  pw.close();
}
于 2013-01-21T17:15:57.473 に答える
-2

次のコードは、ファイル名planetaryData.txtを開くためにも機能します。

PrintWriter outFile = new PrintWriter("planetaryData.txt");
于 2016-07-09T13:24:41.173 に答える