Здравствуйте. Подскажите как исправить код по шаблонному классу? Также прошу подсказать где взять очень хороший пример для разбора данной задачи. Спасибо.
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();
        }
    }
}