Advertisement
anticlown

laba.3.2(Java)

Nov 17th, 2022 (edited)
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.15 KB | None | 0 0
  1. import java.util.HashSet;
  2. import java.util.Scanner;
  3. import java.io.*;
  4.  
  5. public class Main {
  6.   private static final int MIN_VALUE = 2;
  7.   private static final int MAX_VALUE = 255;
  8.   private static final Scanner scan = new Scanner(System.in);
  9.  
  10.   public static void outputTaskInfo() {
  11.     System.out.println("Данная программа находит все простые числа, не превосходящие данного натурального числа." + "\n" +
  12.                        "Диапазон для ввода ограничивающего числа: " + MIN_VALUE + "..." +  MAX_VALUE + ".");
  13.   }
  14.  
  15.   public static int getVerificationOfChoice() {
  16.     int choice = 0;
  17.     boolean isIncorrect;
  18.  
  19.     do {
  20.       isIncorrect = false;
  21.       try {
  22.         choice = Integer.parseInt(scan.nextLine());
  23.       } catch (NumberFormatException e) {
  24.         System.out.println("Проверьте корректность ввода данных!");
  25.         isIncorrect = true;
  26.       }
  27.       if (!isIncorrect && (choice != 0 && choice != 1)) {
  28.         System.out.println("Для выбора введите 0 или 1!");
  29.         isIncorrect = true;
  30.       }
  31.     } while (isIncorrect);
  32.  
  33.     return choice;
  34.   }
  35.  
  36.   public static String inputPathToFile() {
  37.     boolean isIncorrect;
  38.     String path;
  39.  
  40.     System.out.println("Укажите путь к файлу: ");
  41.  
  42.     do {
  43.       isIncorrect = false;
  44.       path = scan.nextLine();
  45.       File file = new File(path);
  46.  
  47.       if (!file.exists()) {
  48.         System.out.println("По указанному пути файл не найден! Укажите правильный путь: ");
  49.         isIncorrect = true;
  50.       }
  51.     } while (isIncorrect);
  52.  
  53.     return path;
  54.   }
  55.  
  56.   public static int readNumberFromConsole(){
  57.     int number = 0;
  58.     boolean isIncorrect;
  59.  
  60.     System.out.println("Введите ограничивающее число: ");
  61.  
  62.     do {
  63.       isIncorrect = false;
  64.       try {
  65.         number = Integer.parseInt(scan.nextLine());
  66.       } catch (NumberFormatException e) {
  67.         System.out.println("Проверьте корректность ввода данных!");
  68.         isIncorrect = true;
  69.       }
  70.       if (!isIncorrect && (number < MIN_VALUE || number > MAX_VALUE)) {
  71.         System.out.println("Введите число от " + MIN_VALUE + " до " + MAX_VALUE + "! \n");
  72.         isIncorrect = true;
  73.       }
  74.     } while (isIncorrect);
  75.  
  76.     return number;
  77.   }
  78.  
  79.   public static int readNumberFromFile(final String path) {
  80.     int number;
  81.     boolean isIncorrect = true;
  82.  
  83.     System.out.println("Происходит чтение ограничивающего числа...");
  84.  
  85.     try (BufferedReader br = new BufferedReader(new FileReader(path))) {
  86.        number = Integer.parseInt(br.readLine());
  87.     } catch (Exception e) {
  88.       isIncorrect = false;
  89.       System.out.println("Ошибка при чтении данных! Введите ограничивающее число с консоли!");
  90.       number = readNumberFromConsole();
  91.     }
  92.  
  93.     if (!isIncorrect && (number < MIN_VALUE || number > MAX_VALUE)) {
  94.       System.out.println("Ошибка при чтении данных! Введите ограничивающее число с консоли!");
  95.       number = readNumberFromConsole();
  96.     }
  97.  
  98.     return number;
  99.   }
  100.  
  101.   public static void outputNumber(final int choice, int number, String path) {
  102.     boolean isIncorrect;
  103.  
  104.     if (choice == 0)
  105.       System.out.println("Число, ограничивающее диапазон поиска: " + number + ".");
  106.     if (choice == 1) {
  107.       System.out.println("Вывод ограничивающего числа в файл...");
  108.  
  109.       do {
  110.         isIncorrect = false;
  111.         try {
  112.           FileWriter writer = new FileWriter(path);
  113.           writer.write(number + "\n");
  114.           writer.close();
  115.         } catch (IOException e) {
  116.           isIncorrect = true;
  117.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  118.           path = inputPathToFile();
  119.         }
  120.       } while (isIncorrect);
  121.  
  122.       System.out.println("Данные успешно записаны в файл!");
  123.     }
  124.   }
  125.  
  126.   public static HashSet<Integer> EratosthenesSieve(final int number) {
  127.     HashSet<Integer> ansSet = new HashSet<>();
  128.     int finalNumber = number + 1;
  129.  
  130.     for (int i = 1; i < finalNumber; i++)
  131.       ansSet.add(i);
  132.  
  133.     int i = 2;
  134.  
  135.     while (i * i < finalNumber) {
  136.       int j = i * i;
  137.  
  138.       while (j < finalNumber) {
  139.         ansSet.remove(j);
  140.         j += i;
  141.       }
  142.  
  143.       i++;
  144.     }
  145.  
  146.     return ansSet;
  147.   }
  148.  
  149.   public static void outputAnsSet(final int choice, String path, final HashSet<Integer> ansSet, final int number) {
  150.     boolean isIncorrect;
  151.  
  152.     if (choice == 0) {
  153.       System.out.println("Вывод множества простых чисел до " + number + ": ");
  154.  
  155.       for (int i: ansSet)
  156.         System.out.print(i + " ");
  157.     }
  158.  
  159.     if (choice == 1) {
  160.       System.out.println("Вывод множества простых чисел до " + number + " в файл...");
  161.  
  162.       do {
  163.         isIncorrect = false;
  164.         try {
  165.           FileWriter writer = new FileWriter(path, true);
  166.           BufferedWriter bufferWriter = new BufferedWriter(writer);
  167.  
  168.           for (int i: ansSet)
  169.             bufferWriter.write(i + " ");
  170.  
  171.           bufferWriter.close();
  172.           writer.close();
  173.         } catch (IOException e) {
  174.           isIncorrect = true;
  175.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  176.           path = inputPathToFile();
  177.         }
  178.       } while (isIncorrect);
  179.  
  180.       System.out.println("Данные успешно записаны в файл!");
  181.     }
  182.   }
  183.  
  184.   public static int processUserInput() {
  185.     int number = 0;
  186.     int choiceForInput;
  187.     String pathToIn;
  188.  
  189.     System.out.println("Вы желаете ввести данные с консоли(0) или взять данные из файла(1)?");
  190.     choiceForInput = getVerificationOfChoice();
  191.  
  192.     if (choiceForInput == 0) {
  193.       number = readNumberFromConsole();
  194.     }
  195.     if (choiceForInput == 1) {
  196.       pathToIn = inputPathToFile();
  197.       number = readNumberFromFile(pathToIn);
  198.     }
  199.  
  200.     return number;
  201.   }
  202.  
  203.   public static void processUserOutput(final int number,final HashSet<Integer> ansSet) {
  204.     int choiceForOutput;
  205.     String pathToOut = "";
  206.  
  207.     System.out.println("Вы желаете получить результат в консоли(0) или в файле(1)?");
  208.     choiceForOutput = getVerificationOfChoice();
  209.  
  210.     if (choiceForOutput == 1)
  211.       pathToOut = inputPathToFile();
  212.  
  213.     outputNumber(choiceForOutput, number, pathToOut);
  214.     outputAnsSet(choiceForOutput, pathToOut, ansSet, number);
  215.   }
  216.  
  217.   public static void main (String[] args) {
  218.     outputTaskInfo();
  219.     int number = processUserInput();
  220.     HashSet<Integer> ansSet = EratosthenesSieve(number);
  221.     processUserOutput(number, ansSet);
  222.  
  223.     scan.close();
  224.   }
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement