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

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

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

Студворк — интернет-сервис помощи студентам
Определить класс Матрица. Создать два конструктора: в первом в качестве аргументов: int n и int m – размерность матрицы, во втором - двумерный массив аr [] []. Реализовать методы вычисления суммы всех элементов матрицы, произведения количества строк на столбцы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.07.2019, 22:51
Ответы с готовыми решениями:

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

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

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

52
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.07.2019, 02:12
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
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.07.2019, 02:23
Результат вычислений (обязательно будет отличаться по причине случайности числовых значений элементов массива):
Миниатюры
Определить класс Матрица  
0
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.07.2019, 03:18
А вот так можно получить случайные размеры тестируемых массивов (мин - 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
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
04.07.2019, 07:19
Цитата Сообщение от 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
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
04.07.2019, 08:03
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
Цитата Сообщение от Gungala Посмотреть сообщение
// Первый конструктор
* * public Matrix(int n, int m) {
* * * * row = n;
* * * * col = m;
* * * * array = new int[row][col];
* * }
зачем нужен конструктор, который создает пустой массив?
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
04.07.2019, 08:39
xoraxax, я откуда знаю? Эт класс alicesmagic3d, я прост немного переделал

Добавлено через 50 секунд
А ваще, в задании сказано такой сделать
Цитата Сообщение от Anastasia2903 Посмотреть сообщение
в первом в качестве аргументов: int n и int m – размерность матрицы
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.07.2019, 08:49
ну надо наверно подумать, зачем это есть в задании, зачем писать так. Если массив пустой, то какой смысл в этом классе?
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
04.07.2019, 09:03
xoraxax, его ж можно заполнить впоследствии
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.07.2019, 09:45
Цитата Сообщение от Gungala Посмотреть сообщение
xoraxax, его ж можно заполнить впоследстви
например как и для чего?
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
04.07.2019, 09:50
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
а нахрена мне вызывать конструктор, а потом еще fillMatrix, если можно сразу матрицу в конструктор отдать?
1
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
04.07.2019, 10:07
xoraxax, шоб получить нулевую матрицу, я не знаю. Как-нибудь это можно использовать, я думаю
0
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.07.2019, 13:12
Супер!!! Спасибо за замечания! Попробую все учесть и переделать

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

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

Добавлено через 1 минуту
под интерфейсом я в данном случае понимаю не interface из явы, а совокупность средств для взаимодействия с объектом (хотя interface в общем-то тоже про это. По крайней мере когда-то было так).
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
04.07.2019, 13:48
xoraxax, теперь я поняла. Спасибо! А то уж испугалась, что тему "Интерфейсы" придется переучивать
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
04.07.2019, 14:07
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.07.2019, 14:07
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru