带螺纹的两个矩阵的乘积

时间:2013-12-14 12:21:10

标签: java

我不擅长编程,但我不得不编写一个程序,通过两种方法计算两个矩阵的乘积:

  

直接的第一种方法。

     

第二个使用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编写这个程序吗?

1 个答案:

答案 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(请参阅链接),包括:

  • 所有类,枚举和接口名称都以大写字母开头。
  • 所有方法和变量名称都以小写字母开头。
  • 学会明智地使用空白,包括参数之间的空格。

这样做,人们将能够更好地阅读和理解您的代码,然后能够为您提供更好的帮助。