2016-04-06 5 views
-3

私はクラス配列とクラス行列を記述するための割り当てを与えられました。行列クラスは配列を作成するために配列クラスを使用します。それは他の配列を指す配列のようです。すべてうまくいったが、私が作成した2つのマトリックスを追加しようとすると、NullPointerExceptionが発生し続ける。これが私のコード全体である。私は下のコードで私のエラーを指摘している。配列を使って行列を作成する

import java.util.Scanner; 

public class Matrix { 
    public Vector mat[]; 
    public static int m; 
    static int i, j; 
    Scanner sc; 

    Matrix() { 
     m = 0; 
     mat = null; 
    } 

    Matrice(int m, int n) { 
     Matrix.m = m; 
     Vector.n = n; 
     mat = new Vector[100]; 
     // mat[i]=new Vector(100); 
    } 

    public void fillmatrix() { 
     mat = new Vector[100]; 
     sc = new Scanner(System.in); 
     System.out.println("enter the number of the rows"); 
     Matrix.m = sc.nextInt(); 
     System.out.println("enter the number of your columns"); 
     Vector.n = sc.nextInt(); 
     for (j = 0; j < m; j++) { 
      mat[j] = new Vector(Vector.n); 
      mat[j].fillmatrix(); 
     } 
    } 

    public void DisplayMatrix() { 
     System.out.println("Th matrix you have entered: "); 
     for (i = 0; i < Vector.n; i++) { 
      mat[i].Display(); 
     } 

     public static Matrix Addition(Matrix mat1, Matrix mat2) { 
      Matrix mat3 = new Matrix(); 
      for (j = 0; j < Vector.n; j++) { 
       for (i = 0; i < Matrix.m; i++) { 
        mat3.mat[i].t[j] = (mat1.mat[i].t[j]) + (mat2.mat[i].t[j]); < -- -- -- -- - where the mistake but i can 't solve it ://> 
       } 

      } 
      return mat3; 
     } 
    } 

    public static void main(String args[]) { 
     Matrix Mat1 = new Matrix(); 
     Matrix Mat2 = new Matrix(); 
     Matrix Mat3 = new Matrix(); 
     Mat1.fill(); 
     Mat1.affiche2(); 
     Mat2.fill(); 
     Mat2.affiche2(); 
     Mat3 = Matrix.Addition(Mat1, Mat2); 
     Mat3.affiche2(); 
    } 

    import java.util.Scanner; 

    public class Vector { 
     public static int n; 
     static int i; 
     static int j, k; 
     int t[]; 
     static Scanner sc = new Scanner(System.in); 

     Vector(int n) { 
      Vector.n = n; 
      t = new int[100]; 
     } 

     Vector() { 
      Vector.n = 0; 
      t = null; 
     } 

     public void fill() { 
      t = new int[100]; 
      sc = new Scanner(System.in); 

      for (i = 0; i < n; i++) { 
       System.out.println("enter " + i + "° element of your array"); 
       t[i] = sc.nextInt(); 
      } 
     } 

     public void contain(Vector Tab) { 
      i = 0; 
      j = 0; 
      if (n <= Tab.t.length) { 
       while (j < Tab.t.length) { 
        if (t[i] != Tab.t[j]) { 
         j++; 
         i = 0; 
        } else { 
         i++; 
         j++; 
        } 
       } 
       if (i > n) { 
        System.out.println("the array 1 is contained in array 2"); 
       } 
       els 
       System.out.println("the array 1is not contained in array2"); 
      } 
     } else { 
      while (i < n) { 
       if (t[i] != Tab.t[j]) { 
        i++; 
        j = 0; 
       } else { 
        i++; 
        j++; 
       } 
      } 
      if (j > n) { 
       System.out.println("the array 2 is contained in array 1"); 
      } else { 
       System.out.println("the array 2 is contained in array 1"); 
      } 
     } 
    } 

    boolean appartient(int x) { 
     i = 0; 
     boolean found = false; 
     while ((i < n) && (t[i] != x)) { 
      i++; 
     } 
     if (i >= n) 
      System.out.println("le x n'appartient pas a votre Tableau"); 
     else { 
      System.out.println("le x appartient a votre tableau"); 
      found = true; 
     } 
     return found; 
    } 

    public void Display() { 
     for (i = 0; i < n; i++) { 
      System.out.println(t[i]); 
     } 
    } 

    public void Order() { 
     int j, tmp; 
     for (i = 0; i < n; i++) { 
      for (j = i + 1; j < n; j++) { 
       if (t[i] > t[j]) { 
        tmp = t[i]; 
        t[i] = t[j]; 
        t[j] = tmp; 
       } 
      } 
     } 
     for (int i = 0; i < n; i++) { 
      System.out.println("your array ordered " + t[i]); 
     } 
    } 

    void inser(int x) { 
     if (appartient(x) == true) { 
      System.out.println("Insersion is impossible, the value already exist"); 
     } else { 
      for (i = n; 
       (i > 0) && (t[i - 1] > x); i--) 
       t[i] = t[i - 1]; 

      t[i] = x; 
      n++; 
      for (i = 0; i < n; i++) 
       System.out.println(t[i]); 
     } 
    } 

    public static void fusionner(Vector tab1, Vector tab2) { 
     Vector FUS = new Vector(tab1.t.length + tab2.t.length); 
     i = 0; 
     j = 0; 
     k = 0; 
     while ((i < tab1.t.length) && (j < tab2.t.length)) 
      if (tab1.t[i] < tab2.t[j]) { 
       FUS.t[k] = tab1.t[i]; 
       k++; 
       i++; 
      } else { 
       FUS.t[k] = tab2.t[j]; 
       k++; 
       j++; 
      } 

     while (i < n) { 
      FUS.t[k] = tab1.t[i]; 
      k++; 
      i++; 
     } 
     while (j < n) { 
      FUS.t[k] = tab2.t[j]; 
      k++; 
      j++; 
     } 

     System.out.println("your arrays after the fusion is "); 
     for (k = 0; k < tab1.t.length + tab2.t.length; k++) 
      System.out.println(FUS.t[k]); 
    } 

    public static void main(String args[]) { 
     Vector tab1 = new Vector(); 
     System.out.println("Enter n"); 
     n = sc.nextInt(); 
     tab1.fill(); 
     tab1.Display(); 
     tab1.trier(); 
     Vector tab2 = new Vector(); 
     tab2.fill(); 
     tab2.affiche(); 
     tab2.trier(); 
     fusionner(tab1, tab2); 
     tab1.contain(tab2); 
     tab2.appartient(5); 
     tab1.inser(6); 
    } 
} 

答えて

0

私は非常に混乱していると思われていたので、これをコメントではなく回答として入れることにしました。

Matrix mat3 = new Matrix();と書くと、mat = null;と設定されているコンストラクタMatrix()が呼び出されます。ですから、mat3.mat[i].**something**という文字を書いたらすぐに、[null].**something**を探しています。意味がありません。

mat3を初期化した後にfillmatrix()を呼び出すと、おそらくあなたが探しているものと推測されます。

あなたが間違っている場所を私が見せてくれることを願っています。

+0

おかげで、私はあなたのアドバイスに基づいて、私のコードにいくつかの変更を加え、そして2つの行列の追加をやり続けるいますmat3.mat [i] .t [j] =(mat1.mat [i] .t [j])+(mat2.mat [i] .t [j])このようにして、 ;私はまだNullpointerの問題、任意のアドバイス、ありがとうございます。 –

+0

@HananeEvancho 'Matrix Addition'は有効な関数名(スペース)ではありません。この関数は** DisplayMatrix'の中に書かれています。 Javaでは、このようなネスト機能は使用できません。 –

+0

私は今働いてくれてありがとう:) –

0

Vecteurクラス..

import java.util.Scanner; 
public class Vecteur { 
    public int n; 
    static int i; 
    static int j, k; 
    int t[]; 
    static Scanner sc = new Scanner(System.in); 
    Vecteur(int n) { 
     this.n = n; 
     t = new int[n]; 
    } 
    Vecteur() { 
     this.n = 0; 
     t = null; 
    } 
    public void remplir() { 
     this.t = new int[100] 
      /*System.out.println("donner le nombre d'element a lire"); 
    n=sc.nextInt();*/ 
     for (i = 0; i < n; i++) { 
      System.out.println("donner le " + i + "° element a lire"); 

      t[i] = sc.nextInt(); 
     } 
    } 
    public void contenu(Vecteur Tab) { 
     i = 0; 
     j = 0; 
     if (n <= Tab.n) { 
      while (j < Tab.n) 

      { 
       if (t[i] != Tab.t[j]) { 
        j++; 
        i = 0; 
       } else { 
        i++; 
        j++; 
       } 

      } 
      if (i > n) { 
       System.out.println("Le tableau 1 est contenu dans tableau 2"); 
      } else { 
       System.out.println("Le tableau 1 n'est pas contenu dans tableau 2"); 
      } 
     } else { 
      while (i < n) 

      { 
       if (t[i] != Tab.t[j]) { 
        i++; 
        j = 0; 
       } else { 
        i++; 
        j++; 
       } 

      } 
      if (j > n) { 
       System.out.println("Le tableau 2 est contenu dans tableau 1"); 
      } else { 
       System.out.println("Le tableau 2 n'est pas contenu dans tableau 1"); 
      } 

     } 
    } 
    boolean appartient(int x) { 
     i = 0; 
     boolean trouve = false; 
     while ((i < n) && (t[i] != x)) { 
      i++; 
     } 
     if (i >= n) 
      System.out.println("le x n'appartient pas a votre Tableau"); 
     else { 
      System.out.println("le x appartient a votre tableau"); 
      trouve = true; 
     } 
     return trouve; 
    } 
    public void affiche() { 
     for (i = 0; i < n; i++) { 
      System.out.println(t[i]); 
     } 

    } 
    public void trier() { 
     int j, tmp; 
     for (i = 0; i < n; i++) { 

      for (j = i + 1; j < n; j++) { 
       if (t[i] > t[j]) { 
        tmp = t[i]; 
        t[i] = t[j]; 
        t[j] = tmp; 

       } 

      } 
     } 

     for (int i = 0; i < n; i++) { 

      System.out.println("Les élements de tableau aprés le trie sont " + t[i]); 

     } 
    } 

    void insere(int x) { 
     if (appartient(x) == true) { 
      System.out.println("L'insersion est impossible, La valeur existe deja!"); 

     } else { 

      for (i = n; 
       (i > 0) && (t[i - 1] > x); i--) 
       t[i] = t[i - 1]; 
      /* VAL est copié à la position du dernier */ 
      /* élément déplacé. */ 
      t[i] = x; 

      n++; 


      for (i = 0; i < n; i++) 
       System.out.println(t[i]); 

     } 
    } 

    static void fusionner(Vecteur tab1, Vecteur tab2) { 

     Vecteur FUS = new Vecteur(tab1.n + tab2.n); 

     i = 0; 
     j = 0; 
     k = 0; 
     while ((i < tab1.n) && (j < tab2.n)) 
      if (tab1.t[i] < tab2.t[j]) { 
       FUS.t[k] = tab1.t[i]; 
       k++; 
       i++; 
      } else { 
       FUS.t[k] = tab2.t[j]; 
       k++; 
       j++; 
      } 

     while (i < tab1.n) { 
      FUS.t[k] = tab1.t[i]; 
      k++; 
      i++; 
     } 
     while (j < tab2.n) { 
      FUS.t[k] = tab2.t[j]; 
      k++; 
      j++; 
     } 

     /* Edition du résultat */ 
     System.out.println("Le tableau aprés le fusion est "); 
     for (k = 0; k < tab1.n + tab2.n; k++) 
      System.out.println(FUS.t[k]); 

    } 
    public static void main(String args[]) { 

     System.out.println("donner le nombre d'element de la table 1"); 

     Vecteur tab1 = new Vecteur(100); 

     tab1.n = sc.nextInt(); 

     tab1.remplir(); 
     tab1.affiche(); 
     tab1.trier(); 

     System.out.println("donner le nombre d'element de la table 2"); 

     Vecteur tab2 = new Vecteur(100); 
     tab2.n = sc.nextInt(); 

     tab2.remplir(); 
     tab2.affiche(); 
     tab2.trier(); 

     fusionner(tab1, tab2); 

     tab1.contenu(tab2); 
     tab2.appartient(5); 
     tab1.insere(6); 
    } 
} 

Matrixクラス..あなたのアドバイスのための

import java.util.Scanner; 
public class Matrice { 

    public Vecteur mat[]; 
    public int m, n; 
    static int i, j; 
    Matrice() { 
     m = 0; 
     mat = null; 

    } 
    Matrice(int m, int n) { 
     this.m = m; 
     this.n = n; 

     mat = new Vecteur[n]; 
     for (int i = 0; i < n; i++) { 
      mat[i] = new Vecteur(m); 
     } 
    } 
    Scanner sc = new Scanner(System.in); 

    public void remplir() { 
     mat = new Vecteur[m]; 

     for (j = 0; j < m; j++) { 
      mat[j] = new Vecteur(this.n); 
      mat[j].remplir(); 
     } 
     public void affiche2() { 
      System.out.println("L'affichage de votre matrice"); 

      for (j = 0; j < this.m; j++) { 
       System.out.println("La ligne" + j); 

       mat[j].affiche(); 

      } 
     } 

     public static void main(String args[]) { 
      Scanner sc = new Scanner(System.in); 
      Matrice Mat1 = new Matrice(100, 100); 

      System.out.println("donner le nombre de votre Ligne a lire de la  matrice1"); 
      Mat1.m = sc.nextInt(); 
      System.out.println("donner le nombre de votre Colomne a lire de la matrice1"); 
      Mat1.n = sc.nextInt(); 
      Mat1.remplir(); 
      Mat1.affiche2(); 

      Matrice Mat2 = new Matrice(100, 100); 
      System.out.println("donner le nombre de votre Ligne a lire de la matrice2"); 
      Mat2.m = sc.nextInt(); 
      System.out.println("donner le nombre de votre Colomme a lire de la matrice2"); 
      Mat2.n = sc.nextInt(); 

      Matrice Mat3 = new Matrice(100, 100); 

      Mat2.remplir(); 
      Mat2.affiche2(); 

      Mat3 = Matrice.somme(Mat1, Mat2); 
      Mat3.affiche2(); 
     } 
     public static Matrice somme(Matrice mat1, Matrice mat2) { 
      Matrice mat3 = new Matrice(mat1.m, mat1.n); 

      for (int j = 0; j < mat1.n; j++) { 
       for (int i = 0; i < mat1.m; i++) { 
        mat3.mat[i].t[j] = (mat1.mat[i].t[j]) + (mat2.mat[i].t[j]); 
       } 

      } 

      return mat3; 
     } 

    } 
} 
関連する問題