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

Pass object of a class to a method of another class

我有一个 class 矩阵,其中包含 class 定义:

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");
        }
    }
}

和一个 class 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() 上收到空指针异常错误。我想那是因为尽管我已将 m1 传递给方法 promptMatrix,但 m1 中没有存储任何内容。请问这是为什么,我该如何解决?

您已经在 promptMatrix 方法中创建了 Matrix,但请记住 m 只是最初传入的引用的副本 -- null .您正确创建了 Matrix,因此 m 引用了新的 Matrix。但是,main 中的 m1 没有改变——它仍然是 null

Return m 来自 promptMatrix 并将其分配给 m1.

创建 MatrixApp class 对象并调用 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
}
}

编辑:关于错误发生的地方我犯了一个错误(我的错误,我没有足够彻底地阅读它。但是下面写的内容有助于理解如何更好地编写易于阅读的代码方式,所以我会留下它。

<----这个标记和下面的标记之间的任何内容都不能正确解决这个问题,但有助于理解下面的内容可以带来好处,所以我将其保留--- ->

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

<----这个标记和上面的标记之间的任何内容都不能正确解决这个问题,但有助于理解下面的内容可能会有好处,所以我将其保留--- ->

正确的做法是让方法 return 一个 Matrix 对象而不是一个。

方法如下所示:

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

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

Matrix m1 = promptMatrix();