我有一个包含类定义的类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。为什么这样,我该如何解决呢?
答案 0 :(得分:1)
您已在Matrix
方法中创建了promptMatrix
,但请记住m
只是最初传递的引用的副本 - null
。您正确创建了Matrix
,以便m
引用新的Matrix
。但是,m1
中main
未被更改 - 它仍然是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();