抛出NullPointerException但我无法弄清楚如何修复它。

时间:2013-03-05 03:48:57

标签: java matrix nullpointerexception

我有以下代码。它是Matrix类的构造函数。主线程只调用构造函数,然后打印矩阵(我为它创建了一个方法)。

public class Matrix{ 
    float [][] mainMatrix; 
    int rows; 
    int columns; 
    public Matrix(){
        System.out.printf("\nInput the number of rows \n") ;
    String rowR = new Scanner(System.in).next().replace(" ", "").replace("\n", "").toString();
    rows = Integer.parseInt(rowR);
    System.out.printf("\n Input the number of columns \n");
    String columnR = new Scanner(System.in).next().replace(" ", "").replace("\n", "").toString();
    columns = Integer.parseInt(columnR);
    System.out.printf("Input the rows, seperated by a \" \". Close the row with a \"]\"");
    System.out.println("Warning!!! Inproper input will cause the program to crash!"); 
    for(int r = 0; r < rows; r++){
        Scanner item = new Scanner(System.in);
        System.out.printf("\n["); 
        String[] raw = item.next().replace("]", "").replace("\n", "").split(" ");
        for(int c = 0; c < columns; c++){
            mainMatrix[r][c] = Float.parseFloat(raw[c]);  
        }
    }
    /*Bunch of methods*/ 
} 

出于某种原因,当代码运行时,它返回NullPointerException,并指向该行:

mainMatrix[r][c] = Float.parseFloat(raw[c]);

如果有帮助,输出如下:

 Input the number of columns 
2

Input the rows, seperated by a " ". Close the row with a "]"Warning!!! Inproper input will cause the program to crash!

[ 2 3] /*\n*/ 
[Ljava.lang.String;@29173efException in thread "main" java.lang.NullPointerException
    at mathProgs.linProg.Matrix.<init>(Matrix.java:51)
    at mathProgs.linProg.MatrixTest.main(MatrixTest.java:10)

2,3和]是用户输入。在“]”

之后按Enter键

2 个答案:

答案 0 :(得分:5)

原因是您尚未初始化mainMatrix。你需要这样的东西:

mainMatrix = new int[rows][columns];

否则该变量的默认值为null,因此当您尝试取消引用它(为数组的元素赋值)时,您将获得NullPointerException

请注意,与其他一些语言不同,一旦您创建了一个数组对象,它就具有固定的大小 - 您不能仅仅在以后添加项目。为此,您需要List实施,例如ArrayList。在这种情况下不是问题,因为你知道你必须从多少行和列开始 - 但值得记住。

答案 1 :(得分:2)

您尚未初始化mainMatrix属性,因此其默认值为null,因此在使用时获取NPE。当你有行和列变量时初始化它:

mainMatrix = new float[rows][columns];