这个Java NullPointerException的原因是什么?

时间:2014-08-22 23:26:33

标签: java nullpointerexception

我似乎在第15行的代码中得到了NullPointerException,但我无法理解为什么。我现在已经坚持了几个小时,而且我不知道如何修复它。我已经阅读了NullPointerException是什么,我想我已经清楚地了解它是什么,但我认为我的if - 声明会修复它,但显然不是。

以下是代码:

package learning;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class Index{
    public static void main(String args[]){
        Index indexObject = new Index();
        String filePath = "C:\\Users\\Edvin\\Desktop\\inputPrices.txt";
        Scanner inputScanner = new Scanner(System.in);
        int average = 0;
        if(indexObject != null){
            average = indexObject.findAverage(getFileInfo(filePath).split(","));
        }
        else{
            System.out.println("Object instance is null. Terminating program.");
        }

        int currentItemInput = inputScanner.nextInt();
        if(currentItemInput<average && currentItemInput != 0){

        }
    }

    private static String getFileInfo(String x){
        File listOfPrices = new File(x);
        String error = "An error occurred";
        try{
            BufferedReader getInfo = new BufferedReader(new FileReader(listOfPrices));

            String prices = getInfo.readLine();

            while(prices != null){
                prices = getInfo.readLine();
            }
            return prices;
        }
        catch(FileNotFoundException e){
            System.out.println("Couldn't find File");
            System.exit(0);
            return error;
        }
        catch(IOException e){
            System.out.println("An I/O error occurred");
            System.exit(0);
            return error;
        }
    }

    public int findAverage(String[] tempIndivPrices){
        int x = 0;
        int y = 0;
        int total;
        int [] indivIntPrices = null;
        for(String i : tempIndivPrices){
            indivIntPrices[x] = Integer.parseInt(tempIndivPrices[x]);
            x++;
        }
        for (int element : indivIntPrices){
            total =+ indivIntPrices[element];
            if(element==indivIntPrices.length-1){
                int result = total / indivIntPrices.length;
                System.out.println(result);
                return result;
            }
        }
        return 0;
    }
}

3 个答案:

答案 0 :(得分:2)

您正在声明一个数组,但在此行中将其初始化为null:int [] indivIntPrices = null;

indivIntPrices现在是一个空指针。然后你试图在两行之后indivIntPrices[x] = ...访问这个数组,这不会起作用,因为变量没有指向一个数组。

要解决此问题,请分配一个与输入数组大小相同的新整数数组:

int [] indivIntPrices = new int[tempIndivPrices.length];

答案 1 :(得分:1)

尝试检查这部分代码:     getFileInfo(文件路径)

你得到了正确的结果吗?它是唯一可以解决此错误的部分。

答案 2 :(得分:0)

删除此循环:

while(prices != null){
    prices = getInfo.readLine();
}

然后,它有效。