将 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();
我有一个 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();