在Java中将2D数组转换为1D数组时,不确定为什么会出现空指针异常

时间:2013-11-05 16:13:06

标签: java arrays file-handling

我正在创建一个从Google财经中读取一些数据的课程。这是通过我的getStockInfo方法处理的。我现在正在尝试创建两个方法来提取由getStockInfo方法创建的2D数组的某些元素,并初始化一维数组。

更具体地说,从Google财经调用的文件是CSV,我只想访问第1和第5列(0和4)。这两个类称为dataExtract和priceExtract。我编写代码时,我的IDE显示没有错误,但是当我运行类时,我得到一个nullPointerException并且我不确定为什么。我猜这与我如何将2D数组转换为一维数组有关,但却失去了原因。

另外,我是否正在将2D阵列转换为1D阵列的最佳步骤?基本上我需要创建一个数组,可以被另一个类访问,以执行一些统计方程式。

非常感谢任何帮助。

编辑:我使用dateExtract和priceExtract方法获取空指针异常。 getStockInfo方法非常有效。

编辑2:发生错误时引用语句“date = dataArray [0]”和“String [] priceString = dataArray [4]”。

public synchronized String[][] getStockInfo(final String symbol, final String stockExhange) {
    BufferedReader br = null;
    String line = " ";
    String splitBy = ",";
    ArrayList<String[]> googleData = new ArrayList<String[]>( );
    try {
        URL googleFin = new URL("http://www.google.co.uk/finance/historical?q=" 
                                    + stockExhange + "%3A" 
                                    + symbol + "&ei=l-d4UvCSM7SAwAOsxwE&output=csv");
        URLConnection gf = googleFin.openConnection();
        br = new BufferedReader(new InputStreamReader(gf.getInputStream()));
        while ((line = br.readLine()) != null) {
            googleData.add(line.split(splitBy));
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    int size = googleData.size(); //The number of elements in the data ArrayList
    String[][] dataArray = new String[5][size]; //The 6 elements are for each column of the CSV Google Finance produces
    int i;
    for (i = 0; i < 5; i++) {
        int j;
        for (j = 0; j < size; j++) {
            dataArray[i][j]=googleData.get(j)[i];//Turn into 2D Array rather than ArrayList and transpose
            System.out.println(dataArray[i][j]);
        }
    }
    return dataArray; 
}    

public String[] dateExtract(String[][] dataArray) {
    String[] date;
    date = dataArray[0];
    for (int i = 0; i < dataArray.length; i++) {
        System.out.println(date[i]);
    }
    return date;
}

public double[] priceExtract(String[][] dataArray) {
    String[] priceString = dataArray[4];
    double[] priceDouble = new double[priceString.length];
    for (int i = 0; i < dataArray.length; i++) {
        priceDouble[i] = Double.parseDouble(priceString[i]);
    }
    for (int i = 0; i < dataArray.length; i++) {
        System.out.println(priceDouble[i]);
    }
    return priceDouble;
}

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。我创建了两个文件阅读器方法,每个方法都处理2d转换。

感谢您的评论。