Advertisement
ksyshshot

Lab.2.3

Nov 7th, 2022 (edited)
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.91 KB | Source Code | 0 0
  1. import java.util.Scanner;
  2. import java.io.*;
  3. import static java.lang.Math.abs;
  4. public class Main {
  5.     static Scanner scan = new Scanner(System.in);
  6.  
  7.     public static void main(String[] args) {
  8.         writeTask();
  9.         System.out.print("Выберите способ ввода данных (1 - через консоль, 2 - с помощью файлов): ");
  10.         int choice = chooseInputOutputMethod();
  11.         int[][] matrix = getMatrix(choice);
  12.         int answer = findMatrixNorm(matrix);
  13.         System.out.print("Выберите способ вывода данных (1 - через консоль, 2 - с помощью файлов): ");
  14.         choice = chooseInputOutputMethod();
  15.         outputResult(choice, answer);
  16.         scan.close();
  17.     }
  18.  
  19.     public static void writeTask() {
  20.         System.out.println("Данная программа вычисляет норму матрицы.");
  21.     }
  22.  
  23.     public static int takeMatrixOrderFromConsole() {
  24.         final int MAX_ORDER = 10;
  25.         final int MIN_ORDER = 2;
  26.         boolean isNotCorrect;
  27.         int order = 0;
  28.         do {
  29.             isNotCorrect = false;
  30.             System.out.print("Введите порядок квадратной матрицы: ");
  31.             try {
  32.                 order = Integer.parseInt(scan.nextLine());
  33.             } catch(NumberFormatException e) {
  34.                 System.out.println("Введено некорректное значение. Повторите попытку...");
  35.                 isNotCorrect = true;
  36.             }
  37.             if ((!isNotCorrect) && ((order < MIN_ORDER) || (order > MAX_ORDER))) {
  38.                 System.out.println("Введённое число не входит в допустимый диапазон. Повторите попытку...");
  39.                 isNotCorrect = true;
  40.             }
  41.         } while (isNotCorrect);
  42.         return order;
  43.     }
  44.  
  45.     public static int[][] createMatrixFromConsole() {
  46.         final int MIN_ELEMENT = -2147483648;
  47.         final int MAX_ELEMENT = 2147483647;
  48.         int order = takeMatrixOrderFromConsole();
  49.         int[][] matrix = new int[order][order];
  50.         boolean isNotCorrect;
  51.         for (int i = 0; i < order; i++) {
  52.             for (int j = 0; j < order; j++) {
  53.                 do {
  54.                     isNotCorrect = false;
  55.                     System.out.print("Введите элемент " + (i + 1) + " строки " + (j + 1) + " столбца матрицы: ");
  56.                     try {
  57.                         matrix[i][j] = Integer.parseInt(scan.nextLine());
  58.                     } catch (NumberFormatException e){
  59.                         System.out.println("Введено некорректное значение. Повторите попытку...");
  60.                         isNotCorrect = true;
  61.                     }
  62.                     if ((!isNotCorrect) && ((matrix[i][j] < MIN_ELEMENT) || (matrix[i][j] > MAX_ELEMENT))) {
  63.                         System.out.println("Введённое значение не входит в допустимый диапазон. Повторите попытку...");
  64.                         isNotCorrect = true;
  65.                     }
  66.                 } while (isNotCorrect);
  67.             }
  68.         }
  69.         return matrix;
  70.     }
  71.  
  72.     public static void outputMatrixInConsole(int[][] matrix) {
  73.         for (int i = 0; i < matrix.length; i++) {
  74.             for (int j = 0; j < matrix.length; j++) {
  75.                 System.out.print(matrix[i][j] + " ");
  76.             }
  77.             System.out.println();
  78.         }
  79.     }
  80.  
  81.     public static String takePathToFile(){
  82.         String path;
  83.         boolean isNotCorrect;
  84.         do {
  85.             isNotCorrect = false;
  86.             System.out.println("Введите путь к файлу: ");
  87.             path = scan.nextLine();
  88.             File file = new File(path);
  89.             if (!file.exists()) {
  90.                 System.out.println("Не удалось найти файл по заданному пути. Повторите попытку...");
  91.                 isNotCorrect = true;
  92.             }
  93.         } while (isNotCorrect);
  94.         return path;
  95.     }
  96.  
  97.     public static int[][] takeMatrixFromFile() {
  98.         System.out.print("Требуется файл для чтения. ");
  99.         String path = takePathToFile();
  100.         final int MAX_ELEMENT = 2147483647;
  101.         final int MIN_ELEMENT = -2147483648;
  102.         final int MAX_ORDER = 10;
  103.         final int MIN_ORDER = 2;
  104.         boolean isNotCorrect;
  105.         int order = 0;
  106.         int[][] matrix;
  107.         do {
  108.             do {
  109.                 isNotCorrect = false;
  110.                 try (Scanner fileReader = new Scanner(new File (path))) {
  111.                     try {
  112.                         order = Integer.parseInt(fileReader.nextLine());
  113.                     } catch (NumberFormatException e) {
  114.                         System.out.print("Некорректный порядок матрицы. ");
  115.                         isNotCorrect = true;
  116.                     }
  117.                     if ((!isNotCorrect) && ((order < MIN_ORDER) || (order > MAX_ORDER))) {
  118.                         System.out.print("Порядок матрицы не входит в допустимый диапазон. ");
  119.                         isNotCorrect = true;
  120.                     }
  121.                 } catch (IOException e) {
  122.                     System.out.print("Не удалось открыть файл по заданному пути. ");
  123.                     isNotCorrect = true;
  124.                 }
  125.                 if (isNotCorrect) {
  126.                     System.out.println("Повторите попытку...");
  127.                     path = takePathToFile();
  128.                 }
  129.             } while (isNotCorrect);
  130.             matrix = new int[order][order];
  131.             int j;
  132.             int i = 0;
  133.             try(Scanner fileReader = new Scanner (new File (path))) {
  134.                 fileReader.nextLine();
  135.                 while ((!isNotCorrect) && (i < order)) {
  136.                     j = 0;
  137.                     while ((!isNotCorrect) && (j < order)) {
  138.                         try {
  139.                             matrix[i][j] = Integer.parseInt(fileReader.next());
  140.                         } catch (NumberFormatException e) {
  141.                             System.out.print("Ошибка! Найдено некорректное значение элемента матрицы. ");
  142.                             isNotCorrect = true;
  143.                             i--;
  144.                         }
  145.                         j++;
  146.                     }
  147.                     i++;
  148.                 }
  149.             } catch (IOException e) {
  150.                 isNotCorrect = true;
  151.                 System.out.print("Не удалось открыть файл. ");
  152.             }
  153.             if (isNotCorrect) {
  154.                 System.out.println("Повторите попытку...");
  155.                 path = takePathToFile();
  156.             }
  157.         } while (isNotCorrect);
  158.         return matrix;
  159.     }
  160.  
  161.     public static int[] calculateAbsSums(int[][] matrix) {
  162.         int[] absSums = new int[matrix.length];
  163.         int sum;
  164.         for (int i = 0; i < matrix.length; i++) {
  165.             sum = 0;
  166.             for (int j = 0; j < matrix.length; j++) {
  167.                 sum += abs(matrix[i][j]);
  168.             }
  169.             absSums[i] = sum;
  170.         }
  171.         return absSums;
  172.     }
  173.  
  174.     public static int findMatrixNorm(int[][] matrix) {
  175.         int[] absSums = calculateAbsSums(matrix);
  176.         int norm = absSums[0];
  177.         for (int i = 1; i < matrix.length; i++) {
  178.             if (absSums[i] > norm) {
  179.                 norm = absSums[i];
  180.             }
  181.         }
  182.         return norm;
  183.     }
  184.  
  185.     public static int chooseInputOutputMethod() {
  186.         boolean isNotCorrect;
  187.         int choice = 0;
  188.         do {
  189.             isNotCorrect = false;
  190.             try {
  191.                 choice = Integer.parseInt(scan.nextLine());
  192.             } catch (NumberFormatException e) {
  193.                 System.out.println("Число введено некорректно. Повторите попытку...");
  194.                 isNotCorrect = true;
  195.             }
  196.             if ((!isNotCorrect) && (choice != 1) && (choice != 2)) {
  197.                 System.out.println("Введите либо 1, либо 2. Ваш выбор: ");
  198.                 isNotCorrect = true;
  199.             }
  200.         } while (isNotCorrect);
  201.         return choice;
  202.     }
  203.  
  204.     public static void outputAnswerInFile(int answer) {
  205.         System.out.print("Требуется файл для записи. ");
  206.         String path = takePathToFile();
  207.         boolean isNotCorrect;
  208.         do {
  209.             isNotCorrect = false;
  210.             try (FileWriter fileWriter = new FileWriter(new File (path))) {
  211.                 fileWriter.write("Полученная норма матрицы: " + answer);
  212.             } catch (IOException e) {
  213.                 System.out.print("Не удалось получить доступ к файлу. ");
  214.                 isNotCorrect = true;
  215.             }
  216.             if (isNotCorrect) {
  217.                 System.out.println("Повторите попытку...");
  218.                 path = takePathToFile();
  219.             }
  220.         } while (isNotCorrect);
  221.         System.out.println("Норма матрицы записана в файл!");
  222.     }
  223.  
  224.     public static int[][] getMatrix(int choice) {
  225.         int[][] matrix;
  226.         if (choice == 1) {
  227.             matrix = createMatrixFromConsole();
  228.             outputMatrixInConsole(matrix);
  229.         } else {
  230.             matrix = takeMatrixFromFile();
  231.         }
  232.         return matrix;
  233.     }
  234.  
  235.     public static void outputResult(int choice, int answer) {
  236.         if (choice == 1) {
  237.             System.out.println("Полученная норма матрицы: " + answer);
  238.         } else {
  239.             outputAnswerInFile(answer);
  240.         }
  241.     }
  242. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement