Filip_Markoski

[NP] Генеричка матрица

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