Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Scanner;
- class Matrix<T> {
- int numRows;
- int numCols;
- ArrayList<ArrayList<T>> matrix;
- public Matrix(int numRows, int numCols) {
- this.numRows = numRows;
- this.numCols = numCols;
- matrix = new ArrayList<>(numRows);
- for (int i = 0; i < numRows; i++) {
- matrix.add(new ArrayList<>());
- for (int j = 0; j < numCols; j++) {
- matrix.get(i).add(null);
- }
- }
- }
- public int getNumRows() {
- return numRows;
- }
- public void setNumRows(int numRows) {
- this.numRows = numRows;
- }
- public int getNumColumns() {
- return numCols;
- }
- public void setNumCols(int numCols) {
- this.numCols = numCols;
- }
- public T getElementAt(int row, int col) {
- return matrix.get(row).get(col);
- }
- void setElementAt(int row, int column, T value) {
- matrix.get(row).set(column, value);
- }
- void fill(T element) {
- for (ArrayList<T> row : matrix) {
- for (int i = 0; i < numCols; ++i)
- row.set(i, element);
- }
- }
- public void validateRow(int row) {
- if (row < 0 || row > numRows)
- throw new ArrayIndexOutOfBoundsException();
- }
- void insertRow(int row) {
- validateRow(row);
- matrix.add(row, new ArrayList<>());
- numRows++;
- for (int i = 0; i < numCols; i++) {
- matrix.get(row).add(null);
- }
- }
- void deleteRow(int row) {
- validateRow(row);
- matrix.remove(row);
- numRows--;
- }
- public void validateColumn(int column) {
- if (column < 0 || column > numCols)
- throw new ArrayIndexOutOfBoundsException();
- }
- void insertColumn(int column) {
- validateColumn(column);
- for (int i = 0; i < numRows; i++)
- matrix.get(i).add(column, null);
- numCols++;
- }
- void deleteColumn(int column) {
- validateColumn(column);
- for (int i = 0; i < numRows; i++)
- matrix.get(i).remove(column);
- numCols--;
- }
- void resize(int row, int col) {
- if (row <= numRows) {
- for (int i = numRows - 1; i >= row; i--) {
- deleteRow(i);
- }
- } else {
- for (int i = numRows; i < row; i++) {
- insertRow(i);
- }
- }
- if (col <= numCols) {
- for (int i = numCols - 1; i >= col; i--) {
- deleteColumn(i);
- }
- } else {
- for (int i = numCols; i < col; i++) {
- insertColumn(i);
- }
- }
- numRows = row;
- numCols = col;
- }
- }
- public class MatrixTest {
- public static void main(String[] args) {
- Scanner jin = new Scanner(System.in);
- int t = jin.nextInt();
- if (t == 0) {
- int r = jin.nextInt();
- int c = jin.nextInt();
- Matrix<Integer> matrix = new Matrix<Integer>(r, c);
- print(matrix);
- }
- if (t == 1) {
- int r = jin.nextInt();
- int c = jin.nextInt();
- Matrix<Integer> matrix = new Matrix<Integer>(r, c);
- for (int i = 0; i < r; ++i) {
- for (int k = 0; k < c; ++k) {
- matrix.setElementAt(i, k, jin.nextInt());
- }
- }
- print(matrix);
- }
- if (t == 2) {
- int r = jin.nextInt();
- int c = jin.nextInt();
- Matrix<String> matrix = new Matrix<String>(r, c);
- for (int i = 0; i < r; ++i) {
- for (int k = 0; k < c; ++k) {
- matrix.setElementAt(i, k, jin.next());
- }
- }
- print(matrix);
- }
- if (t == 3) {
- int r = jin.nextInt();
- int c = jin.nextInt();
- Matrix<String> matrix = new Matrix<String>(r, c);
- for (int i = 0; i < r; ++i) {
- for (int k = 0; k < c; ++k) {
- matrix.setElementAt(i, k, jin.next());
- }
- }
- print(matrix);
- matrix.deleteRow(jin.nextInt());
- matrix.deleteRow(jin.nextInt());
- print(matrix);
- int ir = jin.nextInt();
- matrix.insertRow(ir);
- for (int k = 0; k < c; ++k) {
- matrix.setElementAt(ir, k, jin.next());
- }
- ir = jin.nextInt();
- matrix.insertRow(ir);
- for (int k = 0; k < c; ++k) {
- matrix.setElementAt(ir, k, jin.next());
- }
- print(matrix);
- matrix.deleteColumn(jin.nextInt());
- matrix.deleteColumn(jin.nextInt());
- print(matrix);
- int ic = jin.nextInt();
- matrix.insertColumn(ir);
- for (int i = 0; i < r; ++i) {
- matrix.setElementAt(i, ic, jin.next());
- }
- ic = jin.nextInt();
- matrix.insertColumn(ic);
- for (int i = 0; i < r; ++i) {
- matrix.setElementAt(i, ic, jin.next());
- }
- print(matrix);
- }
- if (t == 4) {
- int r = jin.nextInt();
- int c = jin.nextInt();
- Matrix<Integer> matrix = new Matrix<Integer>(r, c);
- for (int i = 0; i < r; ++i) {
- for (int k = 0; k < c; ++k) {
- matrix.setElementAt(i, k, jin.nextInt());
- }
- }
- print(matrix);
- int nr = jin.nextInt();
- int nc = jin.nextInt();
- matrix.resize(nr, nc);
- print(matrix);
- matrix.fill(jin.nextInt());
- print(matrix);
- }
- }
- public static void print(Matrix<?> m) {
- int r = m.getNumRows();
- int c = m.getNumColumns();
- System.out.println(" " + r + " x " + c);
- System.out.print(" ");
- for (int k = 0; k < c; ++k) {
- System.out.print(k + " ");
- }
- System.out.println();
- System.out.print(" ");
- for (int k = 0; k < c; ++k) {
- System.out.print("-----");
- }
- System.out.println();
- for (int i = 0; i < r; ++i) {
- System.out.print(i + "|");
- for (int k = 0; k < c; ++k) {
- if (k > 0) System.out.print(" ");
- System.out.print(m.getElementAt(i, k));
- }
- System.out.println();
- }
- System.out.println();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment