将类的对象传递给另一个类的方法

时间:2015-09-08 21:42:25

标签: java class object parameters nullpointerexception

我有一个包含类定义的类Matrix:

import java.util.Scanner;

public class Matrix {

    private int[][] matrix;

    //construct matrix with given number of rows and columns
    public Matrix(int n, int m){
        matrix = new int[n][m];
    }

    //input values into matrix
    public void readMatrix(){
        Scanner input = new Scanner(System.in);
        for (int r = 0; r < matrix.length; r++){
            for (int c = 0; c < matrix[r].length; c++){
                matrix[r][c] = input.nextInt();
            }
        }
    }

    //display values of matrix
    public void displayMatrix(){
        for (int r = 0; r < matrix.length; r++){
            for (int c = 0; c < matrix[r].length; c++){
                System.out.print(matrix[r][c] + " ");
            }
            System.out.print("\n");
        }
    }
}

和一个包含main:

的MatrixApp类
import java.util.Scanner;

public class MatrixApp {

    public static void main(String[] args) {
        Matrix m1 = null; //create matrix m1
        promptMatrix(m1); //ask for data for m1 from user
        m1.displayMatrix(); //display m1
    }

    private static void promptMatrix(Matrix m) {
        Scanner input = new Scanner(System.in);
        int rows, columns;
        //ask for number of rows
        System.out.print("Enter the number of rows: ");
        rows = input.nextInt();
        //ask for number of columns
        System.out.print("Enter the number of columns: ");
        columns = input.nextInt();
        //create matrix
        m = new Matrix(rows, columns);
        //ask for matrix data
        System.out.println("Enter matrix: ");
        m.readMatrix();
    }
}

我在m1.displayMatrix()上收到Null Pointer Exception错误。我想这是因为m1中没有存储任何内容,尽管我已经将m1传递给方法promptMatrix。为什么这样,我该如何解决呢?

3 个答案:

答案 0 :(得分:1)

您已在Matrix方法中创建了promptMatrix,但请记住m只是最初传递的引用的副本 - null。您正确创建了Matrix,以便m引用新的Matrix。但是,m1main未被更改 - 它仍然是null

m返回promptMatrix并将其分配给m1

答案 1 :(得分:0)

创建MatrixApp类对象并调用promptMatrix()。

 public class MatrixApp {

public static void main(String[] args) {
    MatrixApp m1 = new MatrixApp(); //create MatrixApp m1
    m1.promptMatrix();

}

private static void promptMatrix() {
    Scanner input = new Scanner(System.in);
    int rows, columns;
    //ask for number of rows
    System.out.print("Enter the number of rows: ");
    rows = input.nextInt();
    //ask for number of columns
    System.out.print("Enter the number of columns: ");
    columns = input.nextInt();
    //create matrix
    m = new Matrix(rows, columns);
    //ask for matrix data
    System.out.println("Enter matrix: ");
    m.readMatrix();
    m.displayMatrix(); //display m
}
}

答案 2 :(得分:0)

编辑:我发现了错误发生的位置错误(我的错误,我没有彻底阅读它。但是下面的内容对于理解如何以易于阅读的方式更好地编写代码非常有用我会把它留下来。

&lt; ----这个和下面这个标记之间的任何东西都不正确解决这个问题,但有助于理解下面哪些内容可以带来好处,所以我要把它留下来----&gt;

正如你所说m1为null并且你将它传递给一个方法,你得到一个NullPointerException。 您需要通过new运算符初始化Matrix对象。     矩阵m1 =新矩阵(n,m);     // n和m是他们需要的任何值     //因为没有默认构造函数 但是,这不是完成您要做的事情的好方法。

&lt; ----这个与上述标记之间的任何内容都不正确以解决这个问题,但有助于理解下面哪些内容可以带来好处,所以我将其放弃----&gt;

执行此操作的正确方法是让方法返回Matrix对象而不是一个。

方法如下所示:

public static Matrix promptMatrix() {
    //code to get n and m and set up matrix
    return new Matrix(n, m);
}

然后在你的主要方法中你会这样做:

Matrix m1 = promptMatrix();