Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/88: Рейтинг темы: голосов - 88, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 3
1

Определить класс Матрица

03.07.2019, 22:51. Показов 16184. Ответов 52

Author24 — интернет-сервис помощи студентам
Определить класс Матрица. Создать два конструктора: в первом в качестве аргументов: int n и int m – размерность матрицы, во втором - двумерный массив аr [] []. Реализовать методы вычисления суммы всех элементов матрицы, произведения количества строк на столбцы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.07.2019, 22:51
Ответы с готовыми решениями:

Класс: Реализовать класс Matrix - матрица, на основе двухмерного массива размерности M на N...
1) Реализовать класс Matrix - матрица, на основе двух-мерного целочисленного массива int ...

Создать класс матрица Данный класс содержит указатель на int...
Помогите решить хотя бы часть задачи. Создать класс матрица Данный класс содержит указатель на...

Определить базовый класс "Матрица" и класс-потомок "Треугольная матрица"
Нужно определить класс "матрица" с возможностью динамического выделения и освобождения памяти,...

Определить класс Матрица
Нужна помощь в решении :cry: Определить класс Матрица размерности (m x n). Реализовать метод,...

52
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.07.2019, 02:12 2
Anastasia2903, вряд ли это поможет вашей учебе, но я попробовала решить задачу. Я сама чайник, поэтому не спешите копировать код. Очень вероятно, что его тут еще будут жестко критиковать. Я надеюсь, что будут. Потому что для меня это первый опыт создания программы такого уровня сложности. Буду рада любым критическим замечаниям и советам (только по данной теме).

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
class Матрица {
    private int row; // количество строк
    private int col; // количество столбцов
    int[][] array;   // двумерный массив (матрица)
    
    // Первый конструктор
    Матрица(int n, int m) {
        row = n;
        col = m;
        array = new int[row][col];
    }
    
    // Второй конструктор
    Матрица(int ar[][]) {
        array = ar;
        row = array.length;
        col = array[0].length;
    }
    
    // Метод вычисления суммы всех элементов матрицы
    void sumMatrix() {
        int sum = 0;
        for (int i = 0; i < row; i++) 
            for (int j = 0; j < col; j++) sum += array[i][j];
        System.out.println("Сумма элементов матрицы: " + sum);
    }
    
    // Метод вычисления произведения количества строк и столбцов
    void sizeMatrix() {
        System.out.println("Произведение количества строк "
                + "и столбцов: " + row * col);
    }
}
class Тест_Матрицы {
    public static void main(String[] args) {
        int n = 4, m = 5;
        int[][] ar = new int[n + 1][m + 2];
        
        // Тестирование первого конструктора
        System.out.println("Матрица1: ");
        Матрица matrix1 = new Матрица(n, m);    // создание объекта
        matrix1.array = FillingOfaMatrix(n, m); // заполнение матрицы
        PrintOfaMatrix(matrix1.array);          // печать матрицы
        // Тестирование методов
        matrix1.sumMatrix();
        matrix1.sizeMatrix();
        
        System.out.println();
        
        // Тестирование второго конструктора
        System.out.println("Матрица2: ");
        ar = FillingOfaMatrix(n + 1, m + 2);    // заполнение матрицы
        PrintOfaMatrix(ar);                     // печать матрицы
        Матрица matrix2 = new Матрица(ar);      // создание объекта
        // Тестирование методов
        matrix2.sumMatrix();
        matrix2.sizeMatrix();
    }
    
        // Метод заполнения массива случайными числами от 1 до 9
    static int[][] FillingOfaMatrix(int row, int col) {
        int[][] array = new int[row][col];
        for (int i = 0; i < row; i++) 
            for (int j = 0; j < col; j++)
                array[i][j] = (int) (Math.random() * 9 + 1);
        return array;
    }
    
        // Метод вывода массива на консоль
    static void PrintOfaMatrix(int[][] array) {
        for (int i = 0; i < array.length; i++) 
            for (int j = 0; j < array[0].length; j++) {
                System.out.print(array[i][j] + "\t");
                if (j == array[0].length - 1) System.out.println();
            }
    }
}
0
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.07.2019, 02:23 3
Результат вычислений (обязательно будет отличаться по причине случайности числовых значений элементов массива):
Миниатюры
Определить класс Матрица  
0
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.07.2019, 03:18 4
А вот так можно получить случайные размеры тестируемых массивов (мин - 2х2, макс - 7х7):
Java
1
2
3
4
        int n = (int) (Math.random() * 7 + 2); 
        int m = (int) (Math.random() * 7 + 2);
        int p = (int) (Math.random() * 7 + 2);
        int q = (int) (Math.random() * 7 + 2);
Этим нужно заменить строку 36 в первоначальном коде.

А этим:
Java
1
ar = FillingOfaMatrix(p, q);    // заполнение матрицы
заменить стоку 52.

Так удобнее тестировать. Каждое выполнение программы новые массивы с новыми размерами.
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
19240 / 10959 / 2919
Регистрация: 21.10.2017
Сообщений: 23,159
04.07.2019, 07:19 5
Цитата Сообщение от alicesmagic3d Посмотреть сообщение
Я надеюсь, что будут
Любой каприз...
1. Методы называем со строчной буквы
2. В методе вывода матрицы условие if (j == array[0].length - 1) System.out.println(); излишне, достаточно
Java
1
2
3
4
5
6
for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[0].length; j++) {
                System.out.print(array[i][j] + "\t");
            }
System.out.println();
}
3. Как правило, методы что-то вычисляющие, возвращают результат, а не просто выводят его в консоль. Он ведь может пригодится для чего-то еще, не так ли?
4. Классы - кириллицей?
1
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
04.07.2019, 08:03 6
alicesmagic3d, если метод что-то делает (выполняет какую-то функцию, а не просто возвращает значение), то его название, как правило, выражено глаголом. Например, compareTo() (сравнить с), close() (закрыть) и т.д., т.е. было бы правильнее назвать методы не FillingOfaMatrix и PrintOfaMatrix, а fillMatrix и printMatrix. И эт, я канеш понимаю, что в данном случае это не обязательно, но почему бы не поставить методам какие-нибудь модификаторы доступа? И кстати о модификаторах доступа, почему массив array в классе матрицы объявлен как public? Как же ООП и все дела? Также хотелось бы заметить, что метод, заполняющий матрицу, можно было бы сделать void, но шоб он изменял массив, который получает в качестве параметра. Тогда можно было бы получить массив array объекта матрицы каким-нибудь методом, вроде getMatrix(), а т.к. массив — это объект, то изменение полученного массива отразится и в самом объекте матрицы
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
class Matrix {
    private int row; // количество строк
    private int col; // количество столбцов
    private int[][] array;   // двумерный массив (матрица)
    
    // Первый конструктор
    public Matrix(int n, int m) {
        row = n;
        col = m;
        array = new int[row][col];
    }
    
    // Второй конструктор
    public Matrix(int ar[][]) {
        array = ar;
        row = array.length;
        col = array[0].length;
    }
    
    public int[][] getMatrix() {
        return array;
    }
    
    // Метод вычисления суммы всех элементов матрицы
    public void sumMatrix() {
        int sum = 0;
        for (int i = 0; i < row; i++) 
            for (int j = 0; j < col; j++) sum += array[i][j];
        System.out.println("Сумма элементов матрицы: " + sum);
    }
    
    // Метод вычисления произведения количества строк и столбцов
    public void sizeMatrix() {
        System.out.println("Произведение количества строк "
                + "и столбцов: " + row * col);
    }
}
class MatrixTest {
    public static void main(String[] args) {
        int n = 4, m = 5;
        int[][] ar = new int[n + 1][m + 2];
        
        // Тестирование первого конструктора
        System.out.println("Матрица1: ");
        Matrix matrix1 = new Matrix(n, m);    // создание объекта
        ar = matrix1.getMatrix(); // заполнение матрицы
        fillMatrix(ar);
        printMatrix(ar);          // печать матрицы
        // Тестирование методов
        matrix1.sumMatrix();
        matrix1.sizeMatrix();
        
        System.out.println();
        
        // Тестирование второго конструктора
        System.out.println("Матрица2: ");
        fillMatrix(ar);    // заполнение матрицы
        printMatrix(ar);                     // печать матрицы
        Matrix matrix2 = new Matrix(ar);      // создание объекта
        // Тестирование методов
        matrix2.sumMatrix();
        matrix2.sizeMatrix();
    }
    
        // Метод заполнения массива случайными числами от 1 до 9
    public static void fillMatrix(int[][] matrix) {
        for (int[] arr : matrix) {
            for (int i = 0; i < arr.length; i++) {
                arr[i] = (int) (Math.random() * 9 + 1);
            }
        }
    }
    
        // Метод вывода массива на консоль
    public static void printMatrix(int[][] array) {
        for (int i = 0; i < array.length; i++) 
            for (int j = 0; j < array[0].length; j++) {
                System.out.print(array[i][j] + "\t");
                if (j == array[0].length - 1) System.out.println();
            }
    }
}
1
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.07.2019, 08:37 7
Цитата Сообщение от Gungala Посмотреть сообщение
// Первый конструктор
* * public Matrix(int n, int m) {
* * * * row = n;
* * * * col = m;
* * * * array = new int[row][col];
* * }
зачем нужен конструктор, который создает пустой массив?
0
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
04.07.2019, 08:39 8
xoraxax, я откуда знаю? Эт класс alicesmagic3d, я прост немного переделал

Добавлено через 50 секунд
А ваще, в задании сказано такой сделать
Цитата Сообщение от Anastasia2903 Посмотреть сообщение
в первом в качестве аргументов: int n и int m – размерность матрицы
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.07.2019, 08:49 9
ну надо наверно подумать, зачем это есть в задании, зачем писать так. Если массив пустой, то какой смысл в этом классе?
0
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
04.07.2019, 09:03 10
xoraxax, его ж можно заполнить впоследствии
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.07.2019, 09:45 11
Цитата Сообщение от Gungala Посмотреть сообщение
xoraxax, его ж можно заполнить впоследстви
например как и для чего?
0
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
04.07.2019, 09:50 12
xoraxax, например вот так
Java
1
2
        int[][] ar = matrix1.getMatrix();
        fillMatrix(ar);
Java
1
2
3
4
5
6
7
    public static void fillMatrix(int[][] matrix) {
        for (int[] arr : matrix) {
            for (int i = 0; i < arr.length; i++) {
                arr[i] = (int) (Math.random() * 9 + 1);
            }
        }
    }

Для того, чтобы потом найти сумму всех элементов и размер матрицы
Java
1
2
        matrix1.sumMatrix();
        matrix1.sizeMatrix();
Ну да, если так подумать, смысла в классе мало, но эт задание такое, што поделать. В потенциале можно было бы реализовать методы умножения, сложения матриц, ну и всякое такое
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.07.2019, 10:01 13
а нахрена мне вызывать конструктор, а потом еще fillMatrix, если можно сразу матрицу в конструктор отдать?
1
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
04.07.2019, 10:07 14
xoraxax, шоб получить нулевую матрицу, я не знаю. Как-нибудь это можно использовать, я думаю
0
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.07.2019, 13:12 15
Супер!!! Спасибо за замечания! Попробую все учесть и переделать

Добавлено через 17 минут
iSmokeJC, класс кириллицей потому что в задании велено определить класс Матрица. Меня давно подмывало попробовать такую вольность. Вот и представилась возможность

Gungala, а зачем нужны какие-нибудь модификаторы доступа для методов, если в данном учебном примере можно обойтись и без них? Понятно, что "если вдруг понадобится использовать класс в других задачах". Но в условии данной задачи такая надобность не прописана, а значит не нужны и явные модификаторы.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.07.2019, 13:23 16
Цитата Сообщение от alicesmagic3d Посмотреть сообщение
а зачем нужны какие-нибудь модификаторы
привыкай по-умолчанию везде, писать private. Если метод входит в интерфейс - тогда public. В особенных случаях, можно использовать другие два.
2
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.07.2019, 13:35 17
Цитата Сообщение от xoraxax Посмотреть сообщение
привыкай по-умолчанию везде, писать private. Если метод входит в интерфейс - тогда public
Так в данном случае методы sumMatrix() и sizeMatrix() не интерфейсные, но если сделать их private, то какой от них толк? Или я неправильно вас поняла?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.07.2019, 13:42 18
Цитата Сообщение от alicesmagic3d Посмотреть сообщение
не интерфейсные
как раз интерфейсные. Весь смысл этого класса, чтобы эти методы выполнять же. Значит надо бы явно написать public.

Добавлено через 1 минуту
под интерфейсом я в данном случае понимаю не interface из явы, а совокупность средств для взаимодействия с объектом (хотя interface в общем-то тоже про это. По крайней мере когда-то было так).
1
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.07.2019, 13:48 19
xoraxax, теперь я поняла. Спасибо! А то уж испугалась, что тему "Интерфейсы" придется переучивать
0
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
04.07.2019, 14:07 20
alicesmagic3d, а вот скажем дано задание сделать класс, выполняющий действия над матрицами. Нет никаких ограничений на название, нет никаких условий насчёт модификаторов доступа, ничего, вот только действия над матрицами, давайте тогда сделаем нечто подобное
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Arrays;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
 
import javax.swing.AbstractAction;
 
class бУтыльBaguette extends AbstractAction implements KeyListener {
 
    protected void KILL_ALL_THE_BUNNIES(int[][] mama) {
        mama[10][15] = 1337;
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
        
    }
    
}
Всё соответствует заданию, класс выполняет действия над матрицами. Получается, всё в порядке. Да? Вы согласны?
0
04.07.2019, 14:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2019, 14:07
Помогаю со студенческими работами здесь

Определить класс «Квадратная матрица» – Matrix.
Определить класс «Квадратная матрица» – Matrix. Класс должен содержать несколько конструкторов, в...

Определить класс "Матрица", используя дружественные функции
Помогите с заданием, кому не сложно. Сложно с функциями, а особенно матрицы. Определить класс...

Создать класс Triad (тройка чисел); определить метод сравнения триад. Определить производный класс Date
Создать класс Triad (тройка чисел); определить метод сравнения триад. Определить производный класс...

Определить класс "Матрица"
Добрый день, друзья! Очень нужна ваша помощь в решении задачи. Нужно сделать к завтрашнему дню две...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru