// Matrix.java
//
//

class IntMatrix{
      int[][] mat;

      IntMatrix(int[][] mat){
         if (mat==null)
            this.mat=new int[0][0];
         else {
            this.mat=new int[mat.length][];
               // we laten toe dat niet elke rij even lang is
            for (int rij=0;rij<mat.length;rij++){
               if (mat[rij]==null)
                  this.mat[rij]=new int[0];
               else {
                  // this.mat[rij]=new int[mat[rij].length];
                  // for (int kol=0;kol<mat[rij].length;kol++)
                  //    this.mat[rij][kol]=mat[rij][kol];

                  this.mat[rij] = (int[])mat[rij].clone();

               } // mat[rij]!=null
            } // for rij
         } // mat!=null
      } // constructor

      void druk(){
         for (int rij=0;rij<mat.length;rij++){
            for (int kol=0;kol<mat[rij].length;kol++)
               System.out.print(mat[rij][kol]+" ");
            System.out.println();
         } // for rij
         System.out.println();
      } // druk()
} // IntMatrix

class Matrix{
   public static void main (String args[]){
      final int AANT_RIJ=4, AANT_KOL=3;
      // dit is het eauivalent van const in C++
      // Indien niet in methode doch als klasse-attribuut,
      // declareer dan als static final int

      int[][] mat = new int[AANT_RIJ][AANT_KOL];
      for (int rij=0;rij<AANT_RIJ;rij++)
         for (int kol=0;kol<AANT_KOL;kol++)
            mat[rij][kol]=(rij+1)*(kol+1);

      IntMatrix im=new IntMatrix(mat);
      System.out.println("\nEen eerste matrix van "+
                         AANT_RIJ + " rijen bij "+AANT_KOL+
                         " kolommen:");
      im.druk();
      
      
      int[][] driehoek =  new int[5][];
      int tel=0;
      for (int i=1; i<=5; i++){
         int[] rij=new int[i];
         for (int j=0; j<i; j++)
            rij[j]=tel++;
         driehoek[i-1]=rij;
      } // for i

      im=new IntMatrix(driehoek);
      System.out.println("\nEen eerste driehoek met grote basis:");
      im.druk();

      int[][] drhk={ {14,13,12,11,10}, {9,8,7,6},
                     {5,4,3}, {2,1}, {0} };
      System.out.println("De driehoek omgekeerd:");
      new IntMatrix(drhk).druk();

      IntTabel it=new IntTabel(driehoek[3]);
      it.druk();


   }//main
}
