Atem85

Matrix

Sep 15th, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.50 KB | None | 0 0
  1. package web4;
  2.  
  3. /**
  4.  * Created by Артем on 03.09.2014.
  5.  */
  6.  
  7. /*1. Создайте интерфейс «матрица» с операциями сложения и умножения.
  8.         Реализуйте этот интерфейс:
  9.         - в обычном классе;
  10.         - в неизменном (immutable) классе.
  11.         Примечание. Второй класс сделайте наследником первого (а можно ли сделать
  12.         наоборот?).
  13.         2. Задокументируйте классы и методы*/
  14.  
  15. public class Matrix implements Interface {
  16.  
  17.     // AS: нарушение инкапсуляции - поля будут видны другим классам.
  18.     int k = 3; // что означает эта переменная? судя по названию - какой-то счетчик.
  19.     // если это константа, то нужно объявить ее как public/private static final int K = 3;
  20.     int sizeMatrix;
  21.     int[][] arr1; // Матрица 1 - AS: нужная перменная - будет хранить состояние класса, поскольку класс описывает только одну матрицу
  22.     int[][] arr2; // Матрица 2 - AS: лишняя перменная
  23.     int[][] arrTemp; //Временный массив для созданий матриц - AS: - скорее всего может быть локальной перменной в любом из нужных методов
  24.     int[][] res = new int[k][]; //Массив для результата - AS: тоже лишняя - тоже можно сохранять результат в локальную переменную метода и потом возвращать
  25.  
  26.  
  27.     public Matrix() {
  28.         // AS: строка не несет полезной нагрузки - поле класса присваивается самому себе.
  29.         this.sizeMatrix = sizeMatrix;
  30.     }
  31.  
  32.     // Метод создания матриц для их дальнейшего умножения
  33.     public int[][] generateMatrix(int sizeMatrix) {
  34.         // AS: распечатку матрицы нужно вынести в отдельный метод, и использовать там где хочется вывести матрицу на печать
  35.         // кажется я это уже писал ),
  36.         System.out.println("Матрица:");
  37.         // AS: arrTemp вполне может быть локальной переменной, тогда метод станет более универсальным и не будет привязан к состоянию класса.
  38.         // если потребуется, его легко можно будет вынести в любой другой класс без риска поломать его работу или работу класса
  39.         arrTemp = new int[sizeMatrix - 1][];
  40.         for (int i = 0; i < arrTemp.length; i++) {
  41.             arrTemp[i] = new int[sizeMatrix];
  42.             for (int j = 0; j < arrTemp[i].length; j++) {
  43.                 arrTemp[i][j] = (int) Math.round(Math.random() * 10);
  44.                 System.out.print(arrTemp[i][j] + "  ");
  45.             }
  46.             System.out.println();
  47.         }
  48.         return arrTemp;
  49.     }
  50.  
  51.     //Метод создания матриц для их дальнейшего сложения
  52.     public int[][] additionMatrix(int sizeMatrix) {
  53.         System.out.println("Матрица:");
  54.         arrTemp = new int[sizeMatrix][];
  55.         for (int i = 0; i < arrTemp.length; i++) {
  56.             arrTemp[i] = new int[sizeMatrix];
  57.             for (int j = 0; j < arrTemp[i].length; j++) {
  58.                 arrTemp[i][j] = (int) Math.round(Math.random() * 10);
  59.                 System.out.print(arrTemp[i][j] + "  ");
  60.             }
  61.             System.out.println();
  62.         }
  63.         return arrTemp;
  64.     }
  65.  
  66.  
  67.     //Метод вызвает generateMatrix и на его основе с введенными ранее параметрами создает матрицы.
  68.     // AS: а по названию метода я думаю что он выполняет какую то операцию над матрицей, только какую неясно
  69.     // понятно, метод используется для генерации значений для матриц
  70.     public void callMatrixCalculation() {
  71.         arr1 = generateMatrix(2);
  72.         arr1 = generateMatrix(3);
  73.     }
  74.  
  75.     //Метод вызвает callMatrixAddition и на его основе с введенными ранее параметрами создает матрицы.
  76.     public void callMatrixAddition() {
  77.         arr1 = additionMatrix(3);
  78.         arr2 = additionMatrix(3);
  79.     }
  80.  
  81.     // Умножение матриц
  82.     // AS: тело метода правильное но надо переписать согласно правильно сигнатуре из интерфейса
  83.     // т.е public int[][] multiply(int[][] m) {}
  84.     public void calculation() {
  85.         for (int i = 0; i < res.length; i++) {
  86.             res[i] = new int[k];
  87.         }
  88.         for (int i = 0; i < arr1.length; i++) {
  89.             for (int j = 0; j < arr1[i].length; j++) {
  90.                 for (int l = 0; l < arr2.length; l++) {
  91.                     res[i][j] += arr1[i][l] * arr2[l][j];
  92.                 }
  93.             }
  94.         }
  95.  
  96.         System.out.println("Результат умножения:");
  97.         for (int i = 0; i < res.length; i++) {
  98.             for (int j = 0; j < res[i].length; j++) {
  99.                 System.out.print(res[i][j] + " ");
  100.             }
  101.             System.out.println();
  102.         }
  103.     }
  104.  
  105.     //Метод сложения матриц
  106.     public void addition() {
  107.         for (int i = 0; i < res.length; i++) {
  108.             res[i] = new int[k];
  109.         }
  110.         for (int i = 0; i < arr1.length; i++) {
  111.             for (int j = 0; j < arr2[i].length; j++) {
  112.                 for (int l = 0; l < arr2.length; l++) {
  113.                     res[i][j] = arr1[i][j] + arr2[i][j];
  114.                 }
  115.             }
  116.         }
  117.  
  118.         System.out.println("Результат сложения:");
  119.         for (int i = 0; i < res.length; i++) {
  120.             for (int j = 0; j < res[i].length; j++) {
  121.                 System.out.print(res[i][j] + " ");
  122.             }
  123.             System.out.println();
  124.         }
  125.     }
  126. }
Advertisement
Add Comment
Please, Sign In to add comment