我不擅长编程,但我不得不编写一个程序,通过两种方法计算两个矩阵的乘积:
直接的第一种方法。
第二个使用Threads,以便计算时间最短。
我为第一种方法编写了这个程序:
Matrix.java
public class Matrix {
public int [][] M;
public int line,col;
static int [][]MProd=null;
//Constructeur
public Matrix (int [][] M,int line,int col) {
this.M=M;
this.col=col;
this.line=line;
for ( int i=0;i<this.line;i++){
for (int j=0;j<this.col;j++)
{
M[i][j]=(int)(Math.random()*100);}}
}
static int [][] prod(Matrix Mat1, Matrix Mat2 ){
for (int j=0;j<Mat2.col;j++){
for (int i=0;i<Mat1.col;i++){
for (int k=0;k<Mat1.line;k++){
MProd[k][j] += Mat1.M[k][i]*Mat2.M[i][j];
}}}
return MProd ;
}}
Main.java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int [][] M = null,N = null;
int line1,line2,col1,col2;
int [][] P=null;
Scanner scanner = new Scanner(System.in);
System.out.println("enter the line number of the first matrix");
line1=scanner.nextInt();
System.out.println("enter the number of columns of the first matrix");
col1=scanner.nextInt();
Matrix Mat= new Matrix (M,line1,col1);
System.out.println("enter the line number of the 2nd matrix");
line2=scanner.nextInt();
System.out.println("enter the number of columns of the 2nd matrix");
col2=scanner.nextInt();
Matrix Mat1= new Matrix (N,line2,col2);
if (col1==line2)
{
P=Matrix.prod(Mat,Mat1) ;
System.out.println("matrix product :");
for (int i=0;i<Mat.line;i++)
{
for (int j=0;j<Mat1.col; j++)
System.out.print( + P[i][j]+" ");
System.out.println();
}}
else {
System.out.println("the matrices product is impossible");
}
}}
当我运行该程序时,它向我显示:
线程“main”java.lang.NullPointerException中的异常 在Matrice。(Matrice.java:18) 在Main.main(Main.java:15)
有人可以帮我纠正这个程序,并告诉我如何使用Threads编写这个程序吗?
答案 0 :(得分:1)
你的NullPointerException是由于:
public static void main(String[] args) {
int [][] M = null,N = null; // all declared null
// ...
Matrix Mat= new Matrix (M,line1,col1); // here you use a null value, M
// ...
Matrix Mat1= new Matrix (N,line2,col2); // and same here, N is null
当您在Matrix类中调用M[i][j]=(int)(Math.random()*100);
时,M为null,因此这将失败。您必须首先创建一个矩阵,您的2D阵列,之前就可以使用它。
修改强>
你问:
你能解释一下吗。
您将空引用传递给Matrix构造函数,然后尝试将其用作变量。您应该传递非空的2D数组:
int[][] myArray = new int[x][y]; // where x and y are appropriate numbers
Matrix Mat= new Matrix (myArray, line1, col1);
另外,请学习并使用标准Java Coding Conventions(请参阅链接),包括:
这样做,人们将能够更好地阅读和理解您的代码,然后能够为您提供更好的帮助。