Здравствуйте. Подскажите как исправить код по шаблонному классу? Также прошу подсказать где взять очень хороший пример для разбора данной задачи. Спасибо.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Введите количество строк матрицы: ");
int row = scanner.nextInt();
scanner.nextLine();
System.out.println("Введите количество столбцов матрицы: ");
int col = scanner.nextInt();
scanner.nextLine();
// создаем экземпляр шаблонного класса Matrix
Matrix<String> matrixNew = new Matrix<>(row, col);
matrixNew.fillFromKeyword(scanner);
scanner.nextLine(); // читает до конца текущей строки
matrixNew.setRandom();
scanner.nextLine();
matrixNew.arithmeticOperations();
scanner.nextLine();
matrixNew.getMaxMin();
scanner.nextLine();
matrixNew.avg();
scanner.nextLine();
matrixNew.display();
scanner.nextLine();
scanner.close();
}
}
import java.util.Scanner;
import java.util.Arrays;
/**
* Шаблонный класс для представления матрицы.
* @param <T> указываем тип элементов матрицы
*/
public class Matrix<T> {
/**
* Поле класса типа T. Массив.
*/
private T[][] matrix;
/**
* Поле класса. Строки.
*/
private int row;
/**
* Поле класса. Столбцы.
*/
private int col;
/**
* Конструктор класса Matrix.
* Через этот конструктор получаем доступ к полям класса.
* @param row строки.
* @param col столбцы.
*/
public Matrix(int row, int col) {
this.row = row;
this.col = col;
this.matrix = (T[][]) new Object[row][col];
}
/**
* Метод для заполнения матрицы значениями, введенными с клавиатуры.
* @param scanner сканнер для считывания данных с клавиатуры.
*/
public void fillFromKeyword(Scanner scanner) {
System.out.println("Введите элементы матрицы: ");
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
System.out.printf("Элемент [%d] [%d]: ", i, j);
if (scanner.hasNext()) {
matrix[i][j] = (T) scanner.next();
}
}
}
}
/**
* Метод для заполнения матрицы случайными значениями.
* где i и j - индексы элементов массива.
*/
public void setRandom() {
int[][] matrix = new int[3][3];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) { // [i] ставить не нужно
matrix[i][j] = (int) (Math.random() * 10);
}
}
System.out.println("Матрица" + Arrays.deepToString(matrix));
}
/**
* Метод по арифм. операциям: +, -, *, / по правилам работы с матрицами.
*/
public void arithmeticOperations(){
Scanner input = new Scanner(System.in); // создаем объект класса Scanner
System.out.print("Введите арифметическую операцию: ");
String operation = input.nextLine();
input.close();
int[][] matrix = new int[][]{{1, 3, -2},
{0, 5, 7}};
int n = 2;
if (operation.equals("+")) {
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < matrix[0].length; j++){
matrix[i][j] = matrix[i][j] + n;
}
}
System.out.print("Результат: элементы матрицы + число N:\n" + Arrays.deepToString(matrix));
}
if (operation.equals("-")) {
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < matrix[0].length; j++){
matrix[i][j] = matrix[i][j] - n;
}
}
System.out.print("Результат: элементы матрицы - число N:\n" + Arrays.deepToString(matrix));
}
if (operation.equals("*")) {
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < matrix[0].length; j++){
matrix[i][j] = matrix[i][j] * n;
}
}
System.out.print("Результат: элементы матрицы * число N:\n" + Arrays.deepToString(matrix));
}
if (operation.equals("/")) {
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < matrix[0].length; j++){
matrix[i][j] = matrix[i][j] / n;
}
}
System.out.print("Результат, остаток не указывается: элементы матрицы / число N:\n" + Arrays.deepToString(matrix));
}
}
}
/**
* Метод по поиску максимального и минимального элемента
*/
public void getMaxMin() {
int[][] matrix = {{-1, -23, 0, 85}, {1, 8, -30, 15}};
int min = 0;
int max = 0;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
if (min > matrix[i][j]) {
min = matrix[i][j];
}
if (max < matrix[i][j]) {
max = matrix[i][j];
}
}
}
System.out.println("Массив: ");
System.out.println("Максимальный: " + max);
System.out.println("Минимальный: " + min);
}
/**
* Метод по подсчету среднеарифметического значения
*/
public void avg() {
int[][] matrix = new int[row][col];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = (int) (Math.random() * 10);
}
}
double sum = 0;
double average = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
System.out.printf("%3d ", matrix[i][j]);
sum += matrix[i][j];
}
System.out.println();
}
average = sum / (row * col);
System.out.println("Сумма всех элементов = " + sum);
System.out.println("Среднеарифметическое = " + average);
}
/**
* Метод для отображения матрицы.
*/
public void display() {
System.out.println("Матрица: ");
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
System.out.print(matrix[i][j] + "\t");
}
System.out.println();
}
}
}