Advertisement
ilevishinov

Генеричка матрица

Nov 26th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.38 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. class Matrix<T>{
  4.     int rows,columns;
  5.     T [][] matrica;
  6.    
  7.    
  8.     Matrix(int r,int c){
  9.         matrica=(T[][]) new Object[r][c];
  10.         rows=r;
  11.         columns=c;
  12.     }
  13.    
  14.     int getNumRows() {
  15.         return rows;
  16.     }
  17.    
  18.     int getNumColumns() {
  19.         return columns;
  20.     }
  21.    
  22.     T getElementAt(int row, int col) {
  23.         return matrica[row][col];
  24.     }
  25.    
  26.     void setElementAt(int row, int col, T value) {
  27.         matrica[row][col]=value;
  28.     }
  29.    
  30.     void fill(T element) {
  31.         for(int i=0;i<rows;i++) {
  32.             for(int j=0;j<columns;j++) {
  33.                 matrica[i][j]=element;
  34.             }
  35.         }
  36.     }
  37.    
  38.     void insertRow(int row) throws ArrayIndexOutOfBoundsException {
  39.         if(row<0 || row>rows) throw new ArrayIndexOutOfBoundsException();
  40.         T[][] matrica1=(T[][]) new Object[rows+1][columns];
  41.        
  42.         for(int i=0;i<row;i++) {
  43.             for(int j=0;j<columns;j++) {
  44.                 matrica1[i][j]=matrica[i][j];
  45.             }
  46.         }
  47.         for(int i=row+1;i<rows+1;i++) {
  48.             for(int j=0;j<columns;j++) {
  49.                 matrica1[i][j]=matrica[i-1][j];
  50.             }
  51.         }
  52.        
  53.         matrica=matrica1;
  54.         rows++;
  55.        
  56.     }
  57.    
  58.     void deleteRow(int row) {
  59.         if(row<0 || row>rows) throw new ArrayIndexOutOfBoundsException();
  60.         T[][] matrica1=(T[][]) new Object[rows-1][columns];
  61.        
  62.         for(int i=0;i<row;i++) {
  63.             for(int j=0;j<columns;j++) {
  64.                 matrica1[i][j]=matrica[i][j];
  65.             }
  66.         }
  67.         for(int i=row+1;i<rows;i++) {
  68.             for(int j=0;j<columns;j++) {
  69.                 matrica1[i-1][j]=matrica[i][j];
  70.             }
  71.         }
  72.        
  73.         matrica=matrica1;
  74.         rows--;
  75.     }
  76.    
  77.     void insertColumn(int col) {
  78.         if(col<0 || col>columns) throw new ArrayIndexOutOfBoundsException();
  79.         T[][] matrica1=(T[][]) new Object[rows][columns+1];
  80.        
  81.         for(int i=0;i<rows;i++) {
  82.             for(int j=0;j<col;j++) {
  83.                 matrica1[i][j]=matrica[i][j];
  84.             }
  85.         }
  86.        
  87.         for(int i=0;i<rows;i++) {
  88.             for(int j=col+1;j<columns+1;j++) {
  89.                 matrica1[i][j]=matrica[i][j-1];
  90.             }
  91.         }
  92.        
  93.         matrica=matrica1;
  94.         columns++;
  95.    
  96.     }
  97.    
  98.     void deleteColumn(int col) {
  99.         if(col<0 || col>columns) throw new ArrayIndexOutOfBoundsException();
  100.         T[][] matrica1=(T[][]) new Object[rows][columns-1];
  101.        
  102.         for(int i=0;i<rows;i++) {
  103.             for(int j=0;j<col;j++) {
  104.                 matrica1[i][j]=matrica[i][j];
  105.             }
  106.         }
  107.        
  108.         for(int i=0;i<rows;i++) {
  109.             for(int j=col+1;j<columns;j++) {
  110.                 matrica1[i][j-1]=matrica[i][j];
  111.             }
  112.         }
  113.         columns--;
  114.         matrica=matrica1;
  115.     }
  116.    
  117.     void resize(int newRows,int newCols) {
  118.         T[][] matrica1=(T[][]) new Object[newRows][newCols];
  119.         if(newRows>this.rows && newCols>this.columns) {
  120.             for(int i=0;i<rows;i++) {
  121.                 for(int j=0;j<columns;j++) {
  122.                     matrica1[i][j]=matrica[i][j];
  123.                 }
  124.             }
  125.             for(int i=rows;i<newRows;i++) {
  126.                 for(int j=columns;j<newCols;j++) {
  127.                     matrica1[i][j]=null;
  128.                 }
  129.             }
  130.            
  131.         } else if(newRows<this.rows && newCols<this.columns){
  132.             for(int i=0;i<newRows;i++) {
  133.                 for(int j=0;j<newCols;j++) {
  134.                     matrica1[i][j]=matrica[i][j];
  135.                 }
  136.             }
  137.            
  138.         } else if(newRows>this.rows && newCols<this.columns) {
  139.             for(int i=0;i<rows;i++) {
  140.                 for(int j=0;j<newCols;j++) {
  141.                     matrica1[i][j]=matrica[i][j];
  142.                 }
  143.             }
  144.             for(int i=rows;i<newRows;i++) {
  145.                 for(int j=0;j<newCols;j++) {
  146.                     matrica1[i][j]=null;
  147.                 }
  148.             }
  149.         } else {
  150.             for(int i=0;i<newRows;i++) {
  151.                 for(int j=0;j<columns;j++) {
  152.                     matrica1[i][j]=matrica[i][j];
  153.                 }
  154.             }
  155.             for(int i=0;i<newRows;i++) {
  156.                 for(int j=columns;j<newCols;j++) {
  157.                     matrica1[i][j]=null;
  158.                 }
  159.             }
  160.         }
  161.        
  162.         rows=newRows;
  163.         columns=newCols;
  164.         matrica=matrica1;
  165.        
  166.     }
  167.    
  168. }
  169.  
  170. public class MatrixTest {
  171.    
  172.     public static void main(String[] args) {
  173.         Scanner jin = new Scanner(System.in);
  174.         int t = jin.nextInt();
  175.         if ( t == 0 ) {
  176.             int r = jin.nextInt();
  177.             int c = jin.nextInt();
  178.             Matrix<Integer> matrix = new Matrix<Integer>(r,c);
  179.             print(matrix);
  180.         }
  181.         if ( t == 1 ) {
  182.             int r = jin.nextInt();
  183.             int c = jin.nextInt();
  184.             Matrix<Integer> matrix = new Matrix<Integer>(r,c);
  185.             for ( int i = 0 ; i < r ; ++i ) {
  186.                 for ( int k = 0 ; k < c ; ++k ) {
  187.                     matrix.setElementAt(i, k, jin.nextInt());
  188.                 }
  189.             }
  190.             print(matrix);
  191.         }
  192.         if ( t == 2 ) {
  193.             int r = jin.nextInt();
  194.             int c = jin.nextInt();
  195.             Matrix<String> matrix = new Matrix<String>(r,c);
  196.             for ( int i = 0 ; i < r ; ++i ) {
  197.                 for ( int k = 0 ; k < c ; ++k ) {
  198.                     matrix.setElementAt(i, k, jin.next());
  199.                 }
  200.             }
  201.             print(matrix);
  202.         }
  203.         if ( t == 3 ) {
  204.             int r = jin.nextInt();
  205.             int c = jin.nextInt();
  206.             Matrix<String> matrix = new Matrix<String>(r,c);
  207.             for ( int i = 0 ; i < r ; ++i ) {
  208.                 for ( int k = 0 ; k < c ; ++k ) {
  209.                     matrix.setElementAt(i, k, jin.next());
  210.                 }
  211.             }
  212.             print(matrix);
  213.             matrix.deleteRow(jin.nextInt());
  214.             matrix.deleteRow(jin.nextInt());
  215.             print(matrix);
  216.             int ir = jin.nextInt();
  217.             matrix.insertRow(ir);
  218.             for ( int k = 0 ; k < c ; ++k ) {
  219.                 matrix.setElementAt(ir, k, jin.next());
  220.             }
  221.             ir = jin.nextInt();
  222.             matrix.insertRow(ir);
  223.             for ( int k = 0 ; k < c ; ++k ) {
  224.                 matrix.setElementAt(ir, k, jin.next());
  225.             }
  226.             print(matrix);
  227.             matrix.deleteColumn(jin.nextInt());
  228.             matrix.deleteColumn(jin.nextInt());
  229.             print(matrix);
  230.             int ic = jin.nextInt();
  231.             matrix.insertColumn(ir);
  232.             for ( int i = 0 ; i < r ; ++i ) {
  233.                 matrix.setElementAt(i, ic, jin.next());
  234.             }
  235.             ic = jin.nextInt();
  236.             matrix.insertColumn(ic);
  237.             for ( int i = 0 ; i < r ; ++i ) {
  238.                 matrix.setElementAt(i, ic, jin.next());
  239.             }
  240.             print(matrix);
  241.         }
  242.         if ( t == 4 ) {
  243.             int r = jin.nextInt();
  244.             int c = jin.nextInt();
  245.             Matrix<Integer> matrix = new Matrix<Integer>(r,c);
  246.             for ( int i = 0 ; i < r ; ++i ) {
  247.                 for ( int k = 0 ; k < c ; ++k ) {
  248.                     matrix.setElementAt(i, k, jin.nextInt());
  249.                 }
  250.             }
  251.             print(matrix);
  252.             int nr = jin.nextInt();
  253.             int nc = jin.nextInt();
  254.             matrix.resize(nr, nc);
  255.             print(matrix);
  256.             matrix.fill(jin.nextInt());
  257.             print(matrix);
  258.         }
  259.     }
  260.    
  261.     public static void print ( Matrix<?> m ) {
  262.         int r = m.getNumRows();int c = m.getNumColumns();
  263.         System.out.println("  "+r+" x "+c);
  264.         System.out.print("    ");
  265.         for ( int k = 0 ; k < c ; ++k ) {
  266.             System.out.print(k+"    ");
  267.         }
  268.         System.out.println();
  269.         System.out.print("  ");
  270.         for ( int k = 0 ; k < c ; ++k ) {
  271.             System.out.print("-----");
  272.         }
  273.         System.out.println();
  274.         for ( int i = 0 ; i < r ; ++i ) {
  275.             System.out.print(i+"|");
  276.             for ( int k = 0 ; k < c ; ++k ) {
  277.                 if ( k > 0 ) System.out.print(" ");
  278.                 System.out.print(m.getElementAt(i, k));
  279.             }
  280.             System.out.println();
  281.         }
  282.         System.out.println();
  283.     }
  284.  
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement