產品

2013-12-14 66 views
0

我不是在節目非常好,但我不得不寫這兩種方法計算兩個矩陣的乘積的程序:產品

直接的方式第一種方法。

第二次使用線程,以便計算時間最短。

我寫了這個程序的第一種方法:

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

當我運行該程序就說明我:

在線程異常 「主」 顯示java.lang.NullPointerException 在矩陣。(Matrice.java:18) 在Main.main(Main.java:15)

有人可以幫我糾正這個程序,並告訴我如何用線程編寫這個程序?

+4

您之前已經發布過,因此您瞭解該演練:1)請說明您的意思是「無效」。 2)請問具體的問題,作爲第二個問題,「......如何用線程編寫這個程序」太寬泛了,真的不是一個可以回答的問題。你必須問清楚你有什麼特別的困惑,因爲你肯定已經閱讀過這個主題並有一些想法。 –

+0

@HovercraftFullOfEels這是我第一次在這裏發帖:) – Med

+3

啊,你的分數騙了我。然後抱怨生硬,但是,如果你努力改善你的問題,我認爲它會爲你和我們提供幫助。再次,「不起作用」給我們很少的信息,我們可以用它來幫助你。再次,你的問題的第二部分太寬泛了。顯示代碼嘗試後,我們會更好地回答特定的尖銳問題。 –

回答

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 

你打電話時,M[i][j]=(int)(Math.random()*100);在Matrix類,M爲空,因此這將失敗。你必須先創建一個矩陣,你的二維數組,之前你可以使用它


編輯
你問:

你能解釋我更多。

您正在向您的Matrix構造函數傳遞一個空引用,然後嘗試將其用作變量。你應該通過一個非空的二維數組來代替:

int[][] myArray = new int[x][y]; // where x and y are appropriate numbers 
Matrix Mat= new Matrix (myArray, line1, col1); 

另外,請學習和使用標準Java Coding Conventions(請參閱下面的鏈接),包括:

  • 所有類,枚舉和接口名稱以大寫字母開頭信。
  • 所有方法和變量名都以小寫字母開頭。
  • 瞭解如何正確使用包括參數之間的空格在內的空白區域。

這樣做和人們會更好地閱讀和理解你的代碼,然後能夠給你更好的幫助。

+0

謝謝,你能解釋一下嗎? – Med

+0

@Amine:請參閱編輯以回答。 –

+0

非常感謝你的幫助:) – Med