首页 > 解决方案 > 将 CSV 数据排序为多维数据,以便修改和保存数据

问题描述

我会尽量让这件事变得简单,因为我只是想着它就让自己感到困惑。

我有 data.csv 有 7 个逗号分隔值,它有 804 行。

例如:

10,100,1000,1,10,100,1050 
10,130,1000,1,12,100,1040 etc

我的任务是创建一个基于 GUI Java 的程序,它执行以下任务;

1.读取 CSV,拆分行并存储到数组中(我觉得这点没问题)

  1. 一旦将数据存储到数组中,就必须对某些数据进行操作。例如;

  2. 查找 CSV 中所有“列”的平均值 - 查找所有列的最小值/最大值

  3. 将数据绘制成图(这个暂时可以忽略哈哈)

所以我真的很困惑如何正确地将我的数据存储到多维数组中,并且还能够操作数组的某些元素。我也需要帮助,因为我只是对是否应该专注于我的 GUI 感到困惑,例如创建一个将加载 csv 的按钮、一个将计算平均值的按钮等。

目前,我只有一个类正在打开文件(仅通过源文件夹)。逐行读取,并且(我认为)将其存储到数组中。

我不是在寻找任何人来握住我的手并为我彻底解决这个问题。但我真的可以得到一些帮助和指导,因为我认为我只是让自己更加困惑。强文本

每个“功能”的多个类会更有意义吗?例如,我有一个用于计算平均值的类,一个用于计算最小值/最大值等的类,如果这是正确的方法,那么如何最好地将其与 GUI 结合起来。`

很抱歉有这么多问题,非常感谢任何可以提供帮助的人!

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


    /////////DECLARING ARRAYS/VARIABLES//////
    String line;
    double year[] = new double [5000];
    double month[] = new double [5000];
    double tmax[] = new double [5000];
    double tmin[] = new double [5000];
    double af[] = new double [5000];
    double rain[] = new double [5000];
    double sun[] = new double [5000];
    //////////////////////////////////////////

    ////////////READING THE FILE "SHEFFIELD DATA" *CHANGE TO JUST DATA FOR EASYNESS**//////////
    BufferedReader file = new BufferedReader(new FileReader("sheffielddata.csv"));
    //////////////////////////////////////////////////////////////////////////////////////////


    ///////////INDEXING THE ARRAY /////////////////
    int index=0;
    ///////////////////////////////////////////////


    ////////LOOP TO ENSURE THE FILE READS EACH LINE/////////////////
    while( (line = file.readLine()) != null){
    ///////////////////////////////////////////////////////////////

    //////////APPLY THE SPLIF METHOD///////////////////////////////
        String[] splits = line.split(","); //This will have total of 7 values 
    //////////////////////////////////////////////////////////////

    //////////////ARRAY AND STRINGS///////////////////////  
        String name = splits[0];
        int[] intArray = new int[7];

        double value0 = Double.parseDouble(splits[0]);
        double value1 = Double.parseDouble(splits[1]);
        double value2 = Double.parseDouble(splits[2]);
        double value3 = Double.parseDouble(splits[3]);
        double value4 = Double.parseDouble(splits[4]);
        double value5 = Double.parseDouble(splits[5]);
        double value6 = Double.parseDouble(splits[6]);

        year[index] = value0;
        month[index] = value1;
        tmax[index] = value2;
        tmin[index] = value3;
        af[index] = value4;
        rain[index] = value5;
        sun [index] = value6;

        ///////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////
    }//LOOP ENDS READING THE CSV FILE

标签: javaarrayscsvuser-interfacemultidimensional-array

解决方案


正如我所看到的,我很容易在这方面犯错,当我想到创建多个类时,我会为我试图封装的每个不同对象创建类。在您的情况下,您询问是否应该为每个计算创建一个不同的类。在您的情况下,我认为您可以在一个类中执行所有计算,但我会将这个类与您构建 GUI 的位置分开。

所以,如果是我,并且我正试图以一种简洁漂亮的方式完成这项任务,我将有以下课程:

1) 一个 InformationArray 类 - 在这个类中,我将创建执行必要计算的方法,并且这个类将包含我需要的任何变量。2) 包含读取 CSV 文件的方法的 FileReader 类。3) 一个 GUI 类,您可以在其中构建一个漂亮的窗格来使用。4) 包含您的主要方法/启动方法的驱动程序类。

我就是这样设置的。希望这有帮助。


推荐阅读