Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package web4;
- /**
- * Created by Артем on 03.09.2014.
- */
- /*1. Создайте интерфейс «матрица» с операциями сложения и умножения.
- Реализуйте этот интерфейс:
- - в обычном классе;
- - в неизменном (immutable) классе.
- Примечание. Второй класс сделайте наследником первого (а можно ли сделать
- наоборот?).
- 2. Задокументируйте классы и методы*/
- public class Matrix implements Interface {
- // AS: нарушение инкапсуляции - поля будут видны другим классам.
- int k = 3; // что означает эта переменная? судя по названию - какой-то счетчик.
- // если это константа, то нужно объявить ее как public/private static final int K = 3;
- int sizeMatrix;
- int[][] arr1; // Матрица 1 - AS: нужная перменная - будет хранить состояние класса, поскольку класс описывает только одну матрицу
- int[][] arr2; // Матрица 2 - AS: лишняя перменная
- int[][] arrTemp; //Временный массив для созданий матриц - AS: - скорее всего может быть локальной перменной в любом из нужных методов
- int[][] res = new int[k][]; //Массив для результата - AS: тоже лишняя - тоже можно сохранять результат в локальную переменную метода и потом возвращать
- public Matrix() {
- // AS: строка не несет полезной нагрузки - поле класса присваивается самому себе.
- this.sizeMatrix = sizeMatrix;
- }
- // Метод создания матриц для их дальнейшего умножения
- public int[][] generateMatrix(int sizeMatrix) {
- // AS: распечатку матрицы нужно вынести в отдельный метод, и использовать там где хочется вывести матрицу на печать
- // кажется я это уже писал ),
- System.out.println("Матрица:");
- // AS: arrTemp вполне может быть локальной переменной, тогда метод станет более универсальным и не будет привязан к состоянию класса.
- // если потребуется, его легко можно будет вынести в любой другой класс без риска поломать его работу или работу класса
- arrTemp = new int[sizeMatrix - 1][];
- for (int i = 0; i < arrTemp.length; i++) {
- arrTemp[i] = new int[sizeMatrix];
- for (int j = 0; j < arrTemp[i].length; j++) {
- arrTemp[i][j] = (int) Math.round(Math.random() * 10);
- System.out.print(arrTemp[i][j] + " ");
- }
- System.out.println();
- }
- return arrTemp;
- }
- //Метод создания матриц для их дальнейшего сложения
- public int[][] additionMatrix(int sizeMatrix) {
- System.out.println("Матрица:");
- arrTemp = new int[sizeMatrix][];
- for (int i = 0; i < arrTemp.length; i++) {
- arrTemp[i] = new int[sizeMatrix];
- for (int j = 0; j < arrTemp[i].length; j++) {
- arrTemp[i][j] = (int) Math.round(Math.random() * 10);
- System.out.print(arrTemp[i][j] + " ");
- }
- System.out.println();
- }
- return arrTemp;
- }
- //Метод вызвает generateMatrix и на его основе с введенными ранее параметрами создает матрицы.
- // AS: а по названию метода я думаю что он выполняет какую то операцию над матрицей, только какую неясно
- // понятно, метод используется для генерации значений для матриц
- public void callMatrixCalculation() {
- arr1 = generateMatrix(2);
- arr1 = generateMatrix(3);
- }
- //Метод вызвает callMatrixAddition и на его основе с введенными ранее параметрами создает матрицы.
- public void callMatrixAddition() {
- arr1 = additionMatrix(3);
- arr2 = additionMatrix(3);
- }
- // Умножение матриц
- // AS: тело метода правильное но надо переписать согласно правильно сигнатуре из интерфейса
- // т.е public int[][] multiply(int[][] m) {}
- public void calculation() {
- for (int i = 0; i < res.length; i++) {
- res[i] = new int[k];
- }
- for (int i = 0; i < arr1.length; i++) {
- for (int j = 0; j < arr1[i].length; j++) {
- for (int l = 0; l < arr2.length; l++) {
- res[i][j] += arr1[i][l] * arr2[l][j];
- }
- }
- }
- System.out.println("Результат умножения:");
- for (int i = 0; i < res.length; i++) {
- for (int j = 0; j < res[i].length; j++) {
- System.out.print(res[i][j] + " ");
- }
- System.out.println();
- }
- }
- //Метод сложения матриц
- public void addition() {
- for (int i = 0; i < res.length; i++) {
- res[i] = new int[k];
- }
- for (int i = 0; i < arr1.length; i++) {
- for (int j = 0; j < arr2[i].length; j++) {
- for (int l = 0; l < arr2.length; l++) {
- res[i][j] = arr1[i][j] + arr2[i][j];
- }
- }
- }
- System.out.println("Результат сложения:");
- for (int i = 0; i < res.length; i++) {
- for (int j = 0; j < res[i].length; j++) {
- System.out.print(res[i][j] + " ");
- }
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment