簡體   English   中英

從文件讀取數據,將結果寫入新文件(java)

[英]Read data from file, write result into a new file(java)

我需要讀取一些txt文件,從中獲取數據,找出平均值,然后將其寫入另一個文件中。 我已經做了幾乎所有的事情,但是無法在新文件中寫入所需的值。

    public static double KronKesk(double a, double b, double c){
        return (a/2+b+c/2)/2;

    } 


     public static double KronKesk2(double[] b){
        int jag = 0;
        double sum = 0;
        for (int i = 0; i < b.length; i++) {
            jag++;
        }
        jag = jag - 1;
        sum = ArraySum(b) - b[0] - b[b.length-1];
        return (b[0]/2 + sum +b[b.length-1]/2)/jag;
     }


    public static double ArraySum(double[] a){
        double sum = 0;
        for (int i = 0; i < a.length; i++) {
            sum = sum+a[i];   
        }
        return sum;
    }

    public static void main(String[] args) {
        try{
            String filePath = "C:\\Users\\user\\Desktop\\TLU\\Semester 2\\ProgPohikursus\\temp";
            BufferedReader br = new BufferedReader(new FileReader(filePath  + ".txt"));
            String rida;

            List<Andmed> andmed = new ArrayList<>();
            int ridaCount = 0;
            while((rida = br.readLine()) != null){
                String[] temp = rida.split(",");
                Andmed andmed0 = new Andmed();
                andmed0.setKuupaev(Double.valueOf(temp[0]));
                andmed0.setTemp0(Double.valueOf(temp[1]));
                andmed0.setTemp6(Double.valueOf(temp[2]));
                andmed0.setTemp12(Double.valueOf(temp[3]));
                andmed0.setTemp18(Double.valueOf(temp[4]));
                andmed0.setTemp24(Double.valueOf(temp[5]));

                andmed.add(andmed0);
                ridaCount++;

            }
            System.out.println(andmed);
            br.close();
            File fout = new File(filePath + "_avgtemp"  + ".txt");
            FileOutputStream fos = new FileOutputStream(fout);
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
            Andmed andmed0 = new Andmed();

            for (int i = 0; i < ridaCount; i++) {

                double[] andmed1 = {andmed0.getTemp0(), andmed0.getTemp6(), andmed0.getTemp12(), andmed0.getTemp18(), andmed0.getTemp24()};
                double[] andmedFaili = {andmed0.getKuupaev(), KronKesk2(andmed1)};
                bw.write(Arrays.toString(andmedFaili) + "\n");
            }
            bw.close();

        } catch(Exception ex){
            ex.printStackTrace();
        }

    }




}

另一個帶有getter和setter的文件:

public class Andmed {
    private double k;
    private double t0;
    private double t6;
    private double t12;
    private double t18;
    private double t24;
    /*protected static List<Double> allTemp = new ArrayList<Double>();

    public double tempListi(double t0, double t6, double t12, double t18, double t24){
    allTemp.add(t0);
    allTemp.add(t6);
    allTemp.add(t12);
    allTemp.add(t18);
    allTemp.add(t24);
    return 0;
    }*/

    public void setKuupaev(double k){
        this.k = k;
    }
    public void setTemp0(double t0){
        this.t0 = t0;

    }
    public void setTemp6(double t6){
        this.t6 = t6;

    }
    public void setTemp12(double t12){
        this.t12 = t12;

    }
    public void setTemp18(double t18){
        this.t18 = t18;

    }
    public void setTemp24(double t24){
        this.t24 = t24;

    }

    public double getKuupaev(){
        return k;
    }
    public double getTemp0(){
        return t0;
    }
    public double getTemp6(){
        return t6;
    }
    public double getTemp12(){
        return t12;
    }
    public double getTemp18(){
        return t18;
    }
    public double getTemp24(){
        return t24;
    }
}

我在第一個文件中擁有的是:

12.01,3,4,5,6,7,8
13.01,4,5,5,4,3,6
...

我需要進入一個新文件:

12.01, 先前6個數字的時間平均值

我現在得到的是:

[0.0, 0.0]
[0.0, 0.0]
[0.0, 0.0]

錯誤在哪里? :/

先感謝您!

for循環中,您根本沒有使用列表,而是在循環之前聲明了一個空的andmed0變量。

擺脫該變量並使用實際列表:

            // Andmed andmed0 = new Andmed(); // no need for that

            for (int i = 0; i < ridaCount; i++) {

                Andmed currentAndmed  = andmed.get(i);
                double[] andmed1 = {currentAndmed.getTemp0(), currentAndmed.getTemp6(), currentAndmed.getTemp12(), currentAndmed.getTemp18(), currentAndmed.getTemp24()};
                double[] andmedFaili = {currentAndmed.getKuupaev(), KronKesk2(andmed1)};
                bw.write(Arrays.toString(andmedFaili) + "\n");
            }

還要注意,您不必使用ridaCount變量來計算列表的大小,只需調用andmed.size()

即:

for (int i = 0; i < andmed.size(); i++)

最后,如@gilfernandes的注釋中所述,您可以簡單地使用foreach循環:

            for(Andmed currentAndmed : andmed) {

                double[] andmed1 = {currentAndmed.getTemp0(), currentAndmed.getTemp6(), currentAndmed.getTemp12(), currentAndmed.getTemp18(), currentAndmed.getTemp24()};
                double[] andmedFaili = {currentAndmed.getKuupaev(), KronKesk2(andmed1)};
                bw.write(Arrays.toString(andmedFaili) + "\n");
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM