Почему мои расчеты не верны? - PullRequest
0 голосов
/ 21 мая 2018

Моя программа читает CSV и вводит данные в массив.После того, как данные были сохранены в массив, я хотел бы изменить данные, чтобы найти определенные вычисления, такие как Среднее, максимальное число и минимальное число.

Я просто не могу понять, где я иду не так ... Я уверен, что это что-то простое.Любая помощь будет принята с благодарностью!

public class calculation {

public static void main(String[] args) throws IOException {

    double year[] = new double [804];
    double month[] = new double [804];
    double tmax[] = new double [804];
    double tmin[] = new double [804];
    double af[] = new double [804];
    double rain[] = new double [804];
    double sun[] = new double [804];
    double tavg[] = new double[804];
    double sumYear = 0;
    double sumMonth = 0;
    double sumTmin = 0;
    double sumTmax = 0;
    double sumRain = 0;
    double sumAF = 0;
    double sumSun = 0;
    int counter = 0;

    //CREATE BUFFERED READER TO READ DATA           
    try {
        BufferedReader file = new BufferedReader(new FileReader("data.csv"));
        String line="";
        //Implement code here
        int index=0;

        //CREATE WHILE LOOP TO READ DATA LINE BY LINE
        while((line = file.readLine()) != null) {
            //Print data to console line by line to ensure it reads data properly
            System.out.println(line);
            //we need to apply split method
            String[] splits = line.split(","); //This will have total of 7 values 

            year[index] = Double.parseDouble(splits[0]);
            month [index] = Double.parseDouble(splits[1]);
            tmax [index] = Double.parseDouble(splits[2]);
            tmin [index] = Double.parseDouble(splits[3]);
            af [index] = Double.parseDouble(splits[4]);
            rain [index] = Double.parseDouble(splits[5]);
            sun [index] = Double.parseDouble(splits[6]);

            sumYear += year[0];
            sumMonth += month[1];
            sumTmax += tmax[2];
            sumTmin += tmin[3];
            sumAF+= af[4];
            sumRain += rain[5];
            sumSun+= sun[6];


            counter++;
            index++;


    }           } catch (FileNotFoundException e1) {
        e1.printStackTrace();
        // TODO Auto-generated catch block
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    //now print averages
    double avgTmax = sumTmax/counter;
    double avgTmin = sumTmin/counter;
    double avgFrost = sumAF/counter;
    double avgRain = sumRain/counter;
    double avgSun = sumSun/counter;
    System.out.println("Average: Maximum Temp: " + avgTmax);
    System.out.println("Average: Minimum Temp: " + avgTmin);
    System.out.println("Average: Rain: " + avgRain);
    System.out.println("Average: Frost: " + avgFrost);
    System.out.println("Average: Sun: " + avgSun);


    }   

}

1 Ответ

0 голосов
/ 21 мая 2018
sumYear += year[0];
sumMonth += month[1];
sumTmax += tmax[2];
sumTmin += tmin[3];
sumAF += af[4];
sumRain += rain[5];
sumSun += sun[6];     

должно быть

sumYear += year[index];
sumMonth += month[index];
sumTmax += tmax[index];
sumTmin += tmin[index];
sumAF += af[index];
sumRain += rain[index];
sumSun += sun[index];   

Вы прочитали строку, состоящую из значений, разделенных запятой, разбили ее и сохранили отдельные значения (splits[0], splits[1].. splits[6]) в соответствующие массивы.Чтобы прочитать их обратно, вам нужно использовать тот же index, который вы написали.

РЕДАКТИРОВАТЬ:

Если вам не нужно хранить фактические значения,Вы можете избавиться от массивов и можете просто вычислить текущую сумму как sumYear += Double.parseDouble(splits[0]); (аналогично для всех)

...