На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Шаблонный (Generic) класс Матрица
    Здравствуйте.
    Подскажите как исправить код по шаблонному классу?
    Также прошу подсказать где взять очень хороший пример для разбора данной задачи.
    Спасибо.

    ExpandedWrap disabled
      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();
          }
      }
      Java


    ExpandedWrap disabled
      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();
              }
          }
      }
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0212 ]   [ 15 queries used ]   [ Generated: 11.12.24, 15:17 GMT ]