Advertisement
Ewerlost

Java6_2

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