Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Генерички податочни структури (6)
- Генеричка матрица Problem 3 (0 / 0)
- Да се напише класа која е генеричка матрица од елементи. Сите елементи се од ист тип. Матрицата има две димензии број
- на редици и број на колони (сите редици имаат ист број на елементи – бројот на колони). Класата Matrix треба да ги
- имплементира следните методи:
- Matrix(int numRows,int numCols) - креира нова матрица со дадените димезии, сите елементи се иницијализираат на null
- getNumRow():int
- getNumColumns():int
- getElementAt(int row, int col) - го враќа елементот на соодветната позиција
- setElementAt(int row, int col, T value) - го поставува елементот на соодветната позиција на новата вредност
- fill(T element) - ги поставува вредностите на сите полиња во матрицата на element
- insertRow(int row) - вметнува нов ред во матрицата на дадената позиција, сите редови после таа позиција се поместуваат
- за едно место во десно (си ги зголемуваат индексите за 1). Валидни вредности за row се [0, getNumRows()], во спротивно
- фрлете исклучок ArrayIndexOutOfBoundsException.
- deleteRow(int row) - го брише соодветниот ред од матрицата, доколку има други редови после него тие се поместуваат во
- лево (нивните индекси се намалуваат за 1). Валидни вредности за row се [0, getNumRows()), во спротивно фрлете
- исклучок ArrayIndexOutOfBoundsException.
- insertColumn(int col) - вметнува новa колона во матрицата на дадената позиција, сите колони после таа позиција се
- поместуваат за едно место во десно (си ги зголемуваат индексите за 1). Валидни вредности за col се [0, getNumColumns()],
- во спротивно фрлете исклучок ArrayIndexOutOfBoundsException.
- deleteColumn (int col) - ја брише соодветната колона од матрицата, доколку има други колони после неа тие се поместуваат
- во лево (нивните индекси се намалуваат за 1). Валидни вредности за col се [0, getNumColumns()), во спротивно фрлете
- исклучок ArrayIndexOutOfBoundsException.
- resize(int rows, int num) - врши промена на димензиите на матрицата. Доколку некоја димезнија е поголема од тековната
- новите полиња се иницијализираат на null. Ако некоја димензија е помала од тековната се врши отсекување на полињата
- кои се вишок.
- Sample input
- 0 5 3
- Sample output
- 5 x 3
- 0 1 2
- ---------------
- 0|null null null
- 1|null null null
- 2|null null null
- 3|null null null
- 4|null null null
- */
- import java.util.Scanner;
- class Matrix<T> {
- private int rows;
- private int columns;
- private T[][] marix;
- public Matrix(int numRows, int numCols){
- rows = numRows;
- columns = numCols;
- marix = (T[][]) new Object[numRows][numCols];
- fill(null);
- }
- public int getNumRows(){
- return rows;
- }
- public int getNumColumns(){
- return columns;
- }
- public T getElementAt(int row, int col){
- return marix[row][col];
- }
- public void setElementAt(int row, int col, T value){
- marix[row][col] = value;
- }
- public void fill(T element){
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < columns; j++) {
- marix[i][j] = element;
- }
- }
- }
- public boolean isValidRow(int n) throws ArrayIndexOutOfBoundsException{
- if (n < 0 || n > rows)
- throw new ArrayIndexOutOfBoundsException();
- return true;
- }
- public boolean isValidColumn(int n) throws ArrayIndexOutOfBoundsException{
- if (n < 0 || n > columns)
- throw new ArrayIndexOutOfBoundsException();
- return true;
- }
- public void insertRow(int row){
- isValidRow(row);
- T[][] temp = (T[][]) new Object[rows+1][columns];
- for (int i = 0; i < row; i++) {
- for (int j = 0; j < columns; j++) {
- temp[i][j] = marix[i][j];
- }
- }
- for (int i = row; i < rows; i++) {
- for (int j = 0; j < columns; j++) {
- temp[i+1][j] = marix[i][j];
- }
- }
- marix = temp;
- rows++;
- }
- public void insertColumn(int col){
- isValidColumn(col);
- T[][] temp = (T[][]) new Object[rows][columns+1];
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < col; j++) {
- temp[i][j] = marix[i][j];
- }
- for (int j = col; j < columns; j++) {
- temp[i][j+1] = marix[i][j];
- }
- }
- marix = temp;
- columns++;
- }
- public void deleteRow(int row){
- isValidRow(row);
- T[][] temp = (T[][]) new Object[rows-1][columns];
- for (int i = 0; i < row; i++) {
- for (int j = 0; j < columns; j++) {
- temp[i][j] = marix[i][j];
- }
- }
- for (int i = row; i < rows-1; i++) {
- for (int j = 0; j < columns; j++) {
- temp[i][j] = marix[i+1][j];
- }
- }
- marix = temp;
- rows--;
- }
- public void deleteColumn(int col){
- isValidColumn(col);
- T[][] temp = (T[][]) new Object[rows][columns-1];
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < col; j++) {
- temp[i][j] = marix[i][j];
- }
- for (int j = col; j < columns-1; j++) {
- temp[i][j] = marix[i][j+1];
- }
- }
- marix = temp;
- columns--;
- }
- public void resize(int rows, int num){
- T[][] tmp = (T[][]) new Object[rows][num];
- for (int i = 0; i < Math.min(rows,this.rows); i++) {
- for (int j = 0; j < Math.min(columns,num); j++) {
- tmp[i][j] = marix[i][j];
- }
- }
- marix = tmp;
- this.rows = rows;
- columns = num;
- }
- }
- 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
Advertisement