ValeriaAVR

java23

Oct 26th, 2024
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.65 KB | None | 0 0
  1. import java.io.*;
  2. import java.nio.file.*;
  3. import java.util.Scanner;
  4. public class Main {
  5.     final static int MIN_N = 2;
  6.     final static int MAX_N = 100;
  7.     final static int MIN_A = -10000;
  8.     final static int MAX_A = 10000;
  9.     static Scanner in = new Scanner(System.in);
  10.  
  11.     public static int inputAndCheckChoice() {
  12.         boolean isIncorrect;
  13.         isIncorrect = false;
  14.         int choice;
  15.         choice = 0;
  16.         do {
  17.             System.out.println("Введите ваш выбор.");
  18.             try {
  19.                 choice = Integer.parseInt(in.nextLine());
  20.             } catch (NumberFormatException e) {
  21.                 isIncorrect = true;
  22.                 System.err.println("Некорректный ввод.");
  23.             }
  24.             if (choice != 1 && choice != 2) {
  25.                 System.err.println("Введите 1 или 2.");
  26.             } else {
  27.                 isIncorrect = false;
  28.             }
  29.         } while (isIncorrect);
  30.         return choice;
  31.     }
  32.  
  33.     public static int inputAndCheckN() {
  34.         boolean isIncorrect;
  35.         int n;
  36.         n = 0;
  37.         do {
  38.             isIncorrect = false;
  39.             System.out.println("Введите порядок матрицы n: ");
  40.             try {
  41.                 n = Integer.parseInt(in.nextLine());
  42.             } catch (NumberFormatException e) {
  43.                 isIncorrect = true;
  44.                 System.err.println("Некорректный ввод. Введите целое число.");
  45.             }
  46.             if (!isIncorrect && (n < MIN_N || n > MAX_N)) {
  47.                 isIncorrect = true;
  48.                 System.err.println("Диапазон значений n от " + MIN_N + " до " + MAX_N + ".");
  49.             }
  50.         } while (isIncorrect);
  51.         return n;
  52.     }
  53.  
  54.     public static boolean isEof(final String fileName) {
  55.         boolean isEof;
  56.         isEof = false;
  57.         try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
  58.             String line = br.readLine();
  59.             if (line != null) {
  60.                 isEof = true;
  61.             }
  62.         } catch (IOException e) {
  63.             System.err.println("Ошибка.");
  64.         }
  65.         return isEof;
  66.     }
  67.  
  68.     public static String requestFileNameForReading() {
  69.         boolean isIncorrect;
  70.         String fileName;
  71.         isIncorrect = true;
  72.         File tempFile;
  73.         Path path;
  74.         do {
  75.             System.out.println("Введите относительный путь к файлу.");
  76.             fileName = in.nextLine();
  77.             path = Paths.get(fileName);
  78.             tempFile = new File(fileName);
  79.             if (!tempFile.exists()) {
  80.                 System.err.println("Файл не существует.");
  81.             } else if (fileName.length() < 5 || !fileName.endsWith(".txt")) {
  82.                 System.err.println("Файл не является текстовым.");
  83.             } else if (!Files.isReadable(path)) {
  84.                 System.err.println("Этот файл невозможно открыть для чтения.");
  85.             } else if (!isEof(fileName)) {
  86.                 System.err.println("Этот файл пустой.");
  87.             } else {
  88.                 isIncorrect = false;
  89.             }
  90.         } while (isIncorrect);
  91.         return fileName;
  92.     }
  93.  
  94.     public static String requestFileNameForWriting() {
  95.         boolean isIncorrect;
  96.         String fileName;
  97.         isIncorrect = true;
  98.         File tempFile;
  99.         Path path;
  100.         do {
  101.             System.out.println("Введите относительный путь к файлу.");
  102.             fileName = in.nextLine();
  103.             path = Paths.get(fileName);
  104.             tempFile = new File(fileName);
  105.             if (!tempFile.exists()) {
  106.                 System.err.println("Файл не существует.");
  107.             } else if (fileName.length() < 5 || !fileName.endsWith(".txt")) {
  108.                 System.err.println("Файл не является текстовым.");
  109.             } else if (!Files.isWritable(path)) {
  110.                 System.err.println("Этот файл невозможно открыть для записи.");
  111.             } else {
  112.                 isIncorrect = false;
  113.             }
  114.         } while (isIncorrect);
  115.         return fileName;
  116.     }
  117.  
  118.     public static boolean checkSize(boolean isIncorrect, final int size, final int count, final String fileName) {
  119.         String tempLine;
  120.         String[] doubleInString;
  121.         if ((!isIncorrect) && ((size * size) == count) && ((size >= MIN_N) && (size <= MAX_N))) {
  122.             double[][] tempMatrix = new double[size][size];
  123.             try (BufferedReader fReader = new BufferedReader(new FileReader(fileName))) {
  124.                 for (int i = 0; i < size; i++) {
  125.                     tempLine = fReader.readLine();
  126.                     if (tempLine != null) {
  127.                         doubleInString = tempLine.split(" ");
  128.                         for (int j = 0; j < size; j++) {
  129.                             tempMatrix[i][j] = Double.parseDouble(doubleInString[j]);
  130.                             if (tempMatrix[i][j] < MIN_A || tempMatrix[i][j] > MAX_A) {
  131.                                 isIncorrect = true;
  132.                             }
  133.                         }
  134.                     }
  135.                 }
  136.                 if (isIncorrect) {
  137.                     System.err.println("Элементы матрицы выходят за диапазон допустимых значений.");
  138.                 }
  139.  
  140.             } catch (NumberFormatException e) {
  141.                 System.err.println("Матрица содержит данные неверного типа.");
  142.                 isIncorrect = true;
  143.             } catch (IOException e) {
  144.                 System.err.println("Непредвиденная ошибка.");
  145.                 isIncorrect = true;
  146.             }
  147.         } else {
  148.             System.err.println("Матрица должна быть квадратной. Диапазон значений n: " + MIN_N + ".." + MAX_N + ".");
  149.             isIncorrect = true;
  150.         }
  151.         return isIncorrect;
  152.     }
  153.  
  154.     public static int readSizeFromFile(String fileName) {
  155.         boolean isIncorrect;
  156.         int size;
  157.         int count;
  158.         String[] doubleInString;
  159.         String tempLine;
  160.         do {
  161.             count = 0;
  162.             isIncorrect = false;
  163.             try (BufferedReader fReader = new BufferedReader(new FileReader(fileName))) {
  164.                 while ((tempLine = fReader.readLine()) != null) {
  165.                     doubleInString = tempLine.split(" ");
  166.                     count += doubleInString.length;
  167.                 }
  168.             } catch (IOException e) {
  169.                 System.err.println("Непредвиденная ошибка.");
  170.                 isIncorrect = true;
  171.             }
  172.             size = (int) Math.sqrt(count);
  173.             isIncorrect = checkSize(isIncorrect, size, count, fileName);
  174.             if (isIncorrect) {
  175.                 fileName = requestFileNameForReading();
  176.             }
  177.         } while (isIncorrect);
  178.         return size;
  179.     }
  180.  
  181.     public static double[][] readMatrix(final int size, String fileName) {
  182.         double[][] matrix = new double[size][size];
  183.         boolean isIncorrect;
  184.         String[] doubleInString;
  185.         String tempLine;
  186.         do {
  187.             isIncorrect = false;
  188.             try (BufferedReader fReader = new BufferedReader(new FileReader(fileName))) {
  189.                 if (matrix != null) {
  190.                     for (int i = 0; i < size; i++) {
  191.                         tempLine = fReader.readLine();
  192.                         if (tempLine != null) {
  193.                             doubleInString = tempLine.split(" ");
  194.                             for (int j = 0; j < size; j++) {
  195.                                 matrix[i][j] = Double.parseDouble(doubleInString[j]);
  196.                                 if (matrix[i][j] < MIN_A || matrix[i][j] > MAX_A) {
  197.                                     isIncorrect = true;
  198.                                 }
  199.                             }
  200.                         }
  201.                     }
  202.                     if (isIncorrect) {
  203.                         System.err.println("Элементы матрицы выходят за диапазон допустимых значений.");
  204.                     }
  205.                 } else {
  206.                     System.err.println("Матрица не содержит элементов.");
  207.                     isIncorrect = true;
  208.                 }
  209.             } catch (NumberFormatException e) {
  210.                 System.err.println("Некорректный тип данных.");
  211.                 isIncorrect = true;
  212.                 matrix = null;
  213.             } catch (IOException e) {
  214.                 System.err.println("Непредвиденная ошибка.");
  215.                 isIncorrect = true;
  216.                 matrix = null;
  217.             }
  218.             if (isIncorrect) {
  219.                 fileName = requestFileNameForReading();
  220.             }
  221.         } while (isIncorrect);
  222.         return matrix;
  223.     }
  224.  
  225.     public static double[][] createMatrix(final int n) {
  226.         double[][] matrix = new double[n][n];
  227.         boolean isIncorrect;
  228.         for (int i = 0; i < n; i++) {
  229.             for (int j = 0; j < n; j++) {
  230.                 do {
  231.                     isIncorrect = false;
  232.                     System.out.println("Введите элемент матрицы: ");
  233.                     try {
  234.                         matrix[i][j] = Double.parseDouble(in.nextLine());
  235.                     } catch (NumberFormatException e) {
  236.                         isIncorrect = true;
  237.                         System.err.println("Некорректный ввод. Введите число.");
  238.                     }
  239.                     if (!isIncorrect && (matrix[i][j] < MIN_A || matrix[i][j] > MAX_A)) {
  240.                         isIncorrect = true;
  241.                         System.err.println("Диапазон значений A от " + MIN_A + " до " + MAX_A + ".");
  242.                     }
  243.                 } while (isIncorrect);
  244.             }
  245.         }
  246.         return matrix;
  247.     }
  248.  
  249.     public static double sumElements(double[][] matrix, int n) {
  250.         double sum;
  251.         sum = 0.0;
  252.         for (int i = 1; i < n; i++) {
  253.             for (int j = 0; j < i; j++) {
  254.                 if (matrix[i][j] > 0) {
  255.                     sum += matrix[i][j];
  256.                 }
  257.             }
  258.         }
  259.         return sum;
  260.     }
  261.  
  262.     public static boolean writeToFile(final String fileName, final double sum) {
  263.         boolean isIncorrect;
  264.         isIncorrect = true;
  265.         String result = Double.toString(sum);
  266.         try (BufferedWriter fWriter = new BufferedWriter(new FileWriter(fileName))) {
  267.             fWriter.write(result);
  268.             System.out.println("Результат выведен в файле.");
  269.             isIncorrect = false;
  270.         } catch (IOException e) {
  271.             System.err.println("Непредвиденная ошибка.");
  272.         }
  273.         return isIncorrect;
  274.     }
  275.  
  276.     public static void main(String[] args) {
  277.         int choice;
  278.         int n;
  279.         double sum;
  280.         boolean isIncorrect;
  281.         String fileName;
  282.         System.out.println("Данная программа считает сумму положительных элементов матрицы порядка n, стоящих под главной диагональю.\nДиапазон значений порядка матрицы n: "
  283.                 + MIN_N + "..." + MAX_N + "\nДиапазон для значений элементов матрицы : " + MIN_A + "..." +
  284.                 MAX_A + "\nОткуда вы хотите вводить данные ? \n1 - консоль, 2 - файл.");
  285.         choice = inputAndCheckChoice();
  286.         double[][] matrix;
  287.         if (choice == 1) {
  288.             n = inputAndCheckN();
  289.             matrix = createMatrix(n);
  290.         } else {
  291.             fileName = requestFileNameForReading();
  292.             n = readSizeFromFile(fileName);
  293.             matrix = readMatrix(n, fileName);
  294.         }
  295.         sum = sumElements(matrix, n);
  296.         System.out.println("Куда Вы хотите вывести результат? \n1 - консоль, 2 - файл.");
  297.         choice = inputAndCheckChoice();
  298.         if (choice == 1) {
  299.             System.out.println("Сумма равна " + sum);
  300.         } else {
  301.             do {
  302.                 fileName = requestFileNameForWriting();
  303.                 isIncorrect = writeToFile(fileName, sum);
  304.             } while (isIncorrect);
  305.         }
  306.         in.close();
  307.     }
  308. }
  309.  
Advertisement
Add Comment
Please, Sign In to add comment