Advertisement
ksyshshot

Untitled

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