Advertisement
THOMAS_SHELBY_18

Lab2_4(Java)

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