Advertisement
Ewerlost

Lab2_4(Java)-sometimes work

Oct 25th, 2023 (edited)
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.95 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.util.NoSuchElementException;
  4. import java.util.Scanner;
  5. import java.io.*;
  6.  
  7.  
  8. public class Main {
  9.     private static final Scanner scan = new Scanner(System.in);
  10.  
  11.     public static int getInt(int min, int max) {
  12.         int n;
  13.         boolean isNotCorrect;
  14.         n = 0;
  15.         do {
  16.             isNotCorrect = false;
  17.             try {
  18.                 n = Integer.parseInt(scan.nextLine());
  19.             } catch (Exception err) {
  20.                 System.out.println("Вы ввели некорректные данные. Попробуйте снова");
  21.                 isNotCorrect = true;
  22.             }
  23.             if (!isNotCorrect && (n < min || n > max)) {
  24.                 System.out.println("Введено значение не входящее в диапазон допустимых значений");
  25.                 isNotCorrect = true;
  26.             }
  27.  
  28.         } while (isNotCorrect);
  29.         return n;
  30.     }
  31.  
  32.     public static boolean checkFile(File file) {
  33.         int n, i;
  34.         int[] checkArr;
  35.         boolean isFileIncorrect = false;
  36.         final int MAX_ARR_LENGTH = 100, MIN_ARR_LENGTH = 1, MIN_ARR_VALUE = -100, MAX_ARR_VALUE = 100;
  37.  
  38.         if (!file.isFile()) {
  39.             System.out.println("Файла по данному пути не существует. Пожалуйста проверьте существование файла и введите путь заново");
  40.                     isFileIncorrect = true;
  41.         }
  42.         if (!isFileIncorrect && !file.canRead() ) {
  43.             System.out.println("Файл по данному пути не может быть прочитан. Пожалуйста проверьте файл и введите путь заново");
  44.                     isFileIncorrect = true;
  45.         }
  46.         if (!isFileIncorrect) {
  47.                 try (Scanner fileScan = new Scanner(file)) {
  48.                     n = Integer.parseInt(fileScan.nextLine());
  49.                     checkArr = new int[n];
  50.                     if (n <= MAX_ARR_LENGTH && n >= MIN_ARR_LENGTH) {
  51.                         i = 0;
  52.                         do {
  53.                             checkArr[i] = fileScan.nextInt();
  54.                             if (checkArr[i] > MAX_ARR_VALUE || checkArr[i] < MIN_ARR_VALUE) {
  55.                                 System.out.println("Элементы последовательности не входят в диапазон допустимых значений");
  56.                                 isFileIncorrect = true;
  57.                             }
  58.                             i++;
  59.                         } while (!isFileIncorrect || i < n);
  60.                     } else {
  61.                         System.out.println("Введена длина последовательности, не входящая в диапазон допустимых значений");
  62.                         isFileIncorrect = true;
  63.                     }
  64.  
  65.                     if (!isFileIncorrect && fileScan.hasNext()) {
  66.                         System.out.println("В файле данные представлены в неправильном формате. Пожалуйста проверьте файл и введите путь заново");
  67.                         isFileIncorrect = true;
  68.                     }
  69.  
  70.                 } catch (FileNotFoundException e) {
  71.                     System.out.println("Файл по данному пути не существует. Пожалуйста проверьте файл и введите путь заново");
  72.                     isFileIncorrect = true;
  73.                 } catch (NoSuchElementException e) {
  74.                     System.out.println("В файле данные представлены в неправильном формате. Пожалуйста проверьте файл и введите путь заново");
  75.                     isFileIncorrect = true;
  76.                 }
  77.             }
  78.  
  79.         return isFileIncorrect;
  80.     }
  81.     public static int[] inputArrFromFile(File file) {
  82.         int n;
  83.         int[] arr;
  84.         arr = null;
  85.         try (Scanner fileScan = new Scanner(file)) {
  86.             n = Integer.parseInt(fileScan.nextLine());
  87.             arr = new int[n];
  88.             for (int i = 0; i < n; i++)
  89.                 arr[i] = fileScan.nextInt();
  90.  
  91.         } catch (IOException e) {
  92.             System.out.println("Не удалось считать данные из файла!");
  93.         }
  94.         return arr;
  95.     }
  96.  
  97.     public static int[] inputArrFromConsole(int length) {
  98.         final int  MIN_ARR_VALUE = -100, MAX_ARR_VALUE = 100;
  99.         int i;
  100.         int[] arr;
  101.         arr = new int [length];
  102.         System.out.println("Введите все элементы последовательности");
  103.         for(i = 0; i < length; i++)
  104.         {
  105.             System.out.println("Введите элемент последовательности №" + (i + 1) + ":");
  106.             arr[i] = getInt(MIN_ARR_VALUE, MAX_ARR_VALUE);
  107.         }
  108.         return arr;
  109.     }
  110.  
  111.     public static int[] inputArr() {
  112.         final int MAX_ARR_LENGTH = 100, MIN_ARR_LENGTH = 1;
  113.         int choice, n;
  114.         int[] arr;
  115.         arr = null;
  116.         boolean isFileIncorrect;
  117.         String pathFile;
  118.         File inputFile;
  119.  
  120.         System.out.println("Выберите вариант ввода:");
  121.         System.out.println("1.Ввод из консоли");
  122.         System.out.println("2.Ввод из файла");
  123.         choice = getInt(1, 2);
  124.  
  125.         if (choice == 1) {
  126.             System.out.println("Введите длину последовательности");
  127.             n = getInt(MIN_ARR_LENGTH, MAX_ARR_LENGTH);
  128.             arr = inputArrFromConsole(n);
  129.         }
  130.         else {
  131.             System.out.println("Данные в файле должны содержать натуральное число");
  132.             do {
  133.                 System.out.print("Введите путь к файлу с его раcширением:");
  134.                 pathFile = scan.nextLine() ;
  135.                 inputFile = new File(pathFile);
  136.                 isFileIncorrect = checkFile(inputFile);
  137.             } while(isFileIncorrect);
  138.             arr = inputArrFromFile(inputFile);
  139.         }
  140.         return arr;
  141.     }
  142.     public static void outputSolution(int[] arr) {
  143.  
  144.         int choice;
  145.         String path;
  146.         boolean isFileIncorrect, verdict;
  147.  
  148.         System.out.println("Выберите вариант вывода: ");
  149.         System.out.println("1.Вывод в консоль");
  150.         System.out.println("2.Вывод в файл");
  151.         choice = getInt(1, 2);
  152.         verdict = checkArr(arr);
  153.         if (choice == 1) {
  154.             if (verdict)
  155.                 System.out.println("Последовательность является невозрастающей");
  156.             else
  157.                 System.out.println("Последовательность не является невозрастающей");
  158.         }
  159.         else {
  160.             System.out.println("Для вывода введите путь к файлу и его имя." + '\n' + "Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию).");
  161.             do {
  162.                 isFileIncorrect = false;
  163.                 System.out.print("Введите путь к файлу и его имя c расширением: ");
  164.                 path = scan.nextLine();
  165.                 File outputFile = new File(path);
  166.                 try {
  167.                     if (outputFile.isFile()) {
  168.                         if (outputFile.canWrite()) {
  169.                             try (FileWriter writer = new FileWriter(outputFile)) {
  170.                                 if (verdict)
  171.                                     writer.write("Последовательность является невозрастающей");
  172.                                 else
  173.                                     writer.write("Последовательность не является невозрастающей");
  174.  
  175.                             }
  176.                         } else {
  177.                             System.out.println("Файл доступен только для чтения!");
  178.                             isFileIncorrect = true;
  179.                         }
  180.                     } else {
  181.                         outputFile.createNewFile();
  182.                         try (FileWriter writer = new FileWriter(outputFile)) {
  183.                             if (verdict)
  184.                                 writer.write("Число является палиндромом");
  185.                             else
  186.                                 writer.write("Число не является палиндромом");
  187.                         }
  188.                     }
  189.                 }
  190.                 catch (IOException e) {
  191.                     System.out.println("Не удалось вывести в файл!");
  192.                     isFileIncorrect = true;
  193.                 }
  194.             } while (isFileIncorrect);
  195.             System.out.println("Вывод данных... успешно!");
  196.         }
  197.     }
  198.  
  199.     public static boolean checkArr(int[] arr) {
  200.         int i;
  201.         boolean solution;
  202.  
  203.         solution = true;
  204.  
  205.         for(i = 0; i < arr.length - 1; i++)
  206.             if (arr[i] < arr[i+1])
  207.                 solution = false;
  208.         return solution;
  209.     }
  210.  
  211.  
  212.     public static void main(String[] args) {
  213.         int[] arrA;
  214.         System.out.println("Эта программа определит, является ли заданная последовательность невозрастающей\nДиапазон для ввода числа от 1 до 1000000\n");
  215.         arrA = inputArr();
  216.         outputSolution(arrA);
  217.         scan.close();
  218.     }
  219.  
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement