Array在Java中抛出NullPointerException

时间:2014-09-28 22:23:11

标签: java arrays methods nullpointerexception null

我有以下小问题...我有这个代码使用一个类OpenFile()的方法ReadData来读取.txt文件,我还有另一个类{{ 1}}用于创建一个对象,该对象存储方法ArraysTZones返回的3个数组(data1,data2,data3)和3个整数(total1,total2,total3)。问题是,当我尝试使用ArrayTZones的getArray()方法显示每个数组(data1,data2,data3)时,它会停止并显示错误OpenFile()。任何人都知道如何解决这个问题?

NullPointerException

Heres OpenFile()

public static void main (String args[]) throws IOException {
    String fileName = ".//data.txt";
    int[] def = new int[180];
    try {

        ReadData file = new ReadData(fileName);
        ArraysTZones summaryatz = new ArraysTZones();
        summaryatz = file.OpenFile();

        for (int i = 0; i < 180; i++)
            System.out.print (summaryatz.getArray1()[i] + " ");
        System.out.println ("");
        System.out.println (summaryatz.getTotal1());

        for (int i = 0; i < 180; i++) 
            System.out.print (summaryatz.getArray2()[i] + " ");
        System.out.println ("");
        System.out.println (summaryatz.getTotal2());

        for (int i = 0; i < 180; i++)
            System.out.print (summaryatz.getArray3()[i] + " ");
        System.out.println ("");
        System.out.println (summaryatz.getTotal3());
    }
    catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

getArray()

public ArraysTZones OpenFile() throws IOException {
    FileReader reader = new FileReader(path);
    BufferedReader textReader = new BufferedReader(reader);
    int numberOfTimeZones = 3;
    int[]  data1 = new int[180];
    int[]  data2 = new int[180];
    int[]  data3 = new int[180];
    int total1 = 0;
    int total2 = 0;
    int total3 = 0;
    ArraysTZones atz = new ArraysTZones();

    for (int i = 0; i < numberOfTimeZones; i++){
        if (i == 0) {
            String firstTimeZone = textReader.readLine();

            String[] val =  firstTimeZone.split ("\\s+");
            for (int u = 0; u < val.length; u++)
            {
                int stats =  (int)(Math.ceil(Math.abs(Double.parseDouble(val[u]))));
                total1 += stats;
                data1[u] = stats;
            }
            total1= total1/180;
            atz.setTotal1(total1);
            atz.setArray1(data1);
        }
        else
        if (i == 1) {
            String secondTimeZone = textReader.readLine();
            String[] val =  secondTimeZone.split ("\\s+");
            for (int u = 0; u < val.length; u++)
            {
                int stats =  (int)(Math.ceil(Math.abs(Double.parseDouble(val[u]))));
                total2 += stats;
                data2[u] = stats;
            }
            total2= total2/180;
            atz.setTotal2(total2);
            atz.setArray2(data2);
        }
        else {
            String thirdTimeZone = textReader.readLine();
            String[] val =  thirdTimeZone.split ("\\s+");
            for (int u = 0; u < val.length; u++)
            {
                int stats =  (int)(Math.ceil(Math.abs(Double.parseDouble(val[u]))));
                total3 += stats;
                data3[u] = stats;
            }
            total3= total3/180;
            atz.setTotal3(total3);
            atz.setArray3(data3);
        }
    }
    textReader.close();
    return atz;
}

和setArray()

public int[] getArray1 () {
    return data1;
}

2 个答案:

答案 0 :(得分:1)

问题似乎在这里

public void setArray1 (int[] farray)
{
    int[]  data1 = new int[180];
    //int[] farray = new int[180];
    data1 = farray;
}

您正在声明一个名为data1的新变量并将farray的内容存储到其中。 完成该方法后,由于其范围,该变量将被删除。

从行int[]中删除int[] data1 = new int[180];(或者只删除整行......这是不必要的),您的数据将存储在为该类声明的正确变量中。

public void setArray1 (int[] farray) {
    data1 = farray;
}

答案 1 :(得分:0)

您必须初始化ArraysTZones