Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.HashSet;
- import java.util.Scanner;
- import java.io.*;
- public class Main {
- private static final int MIN_VALUE = 2;
- private static final int MAX_VALUE = 255;
- private static final Scanner scan = new Scanner(System.in);
- public static void outputTaskInfo() {
- System.out.println("Данная программа находит все простые числа, не превосходящие данного натурального числа." + "\n" +
- "Диапазон для ввода ограничивающего числа: " + MIN_VALUE + "..." + MAX_VALUE + ".");
- }
- public static int getVerificationOfChoice() {
- int choice = 0;
- boolean isIncorrect;
- do {
- isIncorrect = false;
- try {
- choice = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Проверьте корректность ввода данных!");
- isIncorrect = true;
- }
- if (!isIncorrect && (choice != 0 && choice != 1)) {
- System.out.println("Для выбора введите 0 или 1!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return choice;
- }
- public static String inputPathToFile() {
- boolean isIncorrect;
- String path;
- System.out.println("Укажите путь к файлу: ");
- do {
- isIncorrect = false;
- path = scan.nextLine();
- File file = new File(path);
- if (!file.exists()) {
- System.out.println("По указанному пути файл не найден! Укажите правильный путь: ");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return path;
- }
- public static int readNumberFromConsole(){
- int number = 0;
- boolean isIncorrect;
- System.out.println("Введите ограничивающее число: ");
- do {
- isIncorrect = false;
- try {
- number = Integer.parseInt(scan.nextLine());
- } catch (NumberFormatException e) {
- System.out.println("Проверьте корректность ввода данных!");
- isIncorrect = true;
- }
- if (!isIncorrect && (number < MIN_VALUE || number > MAX_VALUE)) {
- System.out.println("Введите число от " + MIN_VALUE + " до " + MAX_VALUE + "! \n");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return number;
- }
- public static int readNumberFromFile(final String path) {
- int number;
- boolean isIncorrect = true;
- System.out.println("Происходит чтение ограничивающего числа...");
- try (BufferedReader br = new BufferedReader(new FileReader(path))) {
- number = Integer.parseInt(br.readLine());
- } catch (Exception e) {
- isIncorrect = false;
- System.out.println("Ошибка при чтении данных! Введите ограничивающее число с консоли!");
- number = readNumberFromConsole();
- }
- if (!isIncorrect && (number < MIN_VALUE || number > MAX_VALUE)) {
- System.out.println("Ошибка при чтении данных! Введите ограничивающее число с консоли!");
- number = readNumberFromConsole();
- }
- return number;
- }
- public static void outputNumber(final int choice, int number, String path) {
- boolean isIncorrect;
- if (choice == 0)
- System.out.println("Число, ограничивающее диапазон поиска: " + number + ".");
- if (choice == 1) {
- System.out.println("Вывод ограничивающего числа в файл...");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path);
- writer.write(number + "\n");
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static HashSet<Integer> EratosthenesSieve(final int number) {
- HashSet<Integer> ansSet = new HashSet<>();
- int finalNumber = number + 1;
- for (int i = 1; i < finalNumber; i++)
- ansSet.add(i);
- int i = 2;
- while (i * i < finalNumber) {
- int j = i * i;
- while (j < finalNumber) {
- ansSet.remove(j);
- j += i;
- }
- i++;
- }
- return ansSet;
- }
- public static void outputAnsSet(final int choice, String path, final HashSet<Integer> ansSet, final int number) {
- boolean isIncorrect;
- if (choice == 0) {
- System.out.println("Вывод множества простых чисел до " + number + ": ");
- for (int i: ansSet)
- System.out.print(i + " ");
- }
- if (choice == 1) {
- System.out.println("Вывод множества простых чисел до " + number + " в файл...");
- do {
- isIncorrect = false;
- try {
- FileWriter writer = new FileWriter(path, true);
- BufferedWriter bufferWriter = new BufferedWriter(writer);
- for (int i: ansSet)
- bufferWriter.write(i + " ");
- bufferWriter.close();
- writer.close();
- } catch (IOException e) {
- isIncorrect = true;
- System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
- path = inputPathToFile();
- }
- } while (isIncorrect);
- System.out.println("Данные успешно записаны в файл!");
- }
- }
- public static int processUserInput() {
- int number = 0;
- int choiceForInput;
- String pathToIn;
- System.out.println("Вы желаете ввести данные с консоли(0) или взять данные из файла(1)?");
- choiceForInput = getVerificationOfChoice();
- if (choiceForInput == 0) {
- number = readNumberFromConsole();
- }
- if (choiceForInput == 1) {
- pathToIn = inputPathToFile();
- number = readNumberFromFile(pathToIn);
- }
- return number;
- }
- public static void processUserOutput(final int number,final HashSet<Integer> ansSet) {
- int choiceForOutput;
- String pathToOut = "";
- System.out.println("Вы желаете получить результат в консоли(0) или в файле(1)?");
- choiceForOutput = getVerificationOfChoice();
- if (choiceForOutput == 1)
- pathToOut = inputPathToFile();
- outputNumber(choiceForOutput, number, pathToOut);
- outputAnsSet(choiceForOutput, pathToOut, ansSet, number);
- }
- public static void main (String[] args) {
- outputTaskInfo();
- int number = processUserInput();
- HashSet<Integer> ansSet = EratosthenesSieve(number);
- processUserOutput(number, ansSet);
- scan.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement