Advertisement
Vladislav8653

4.4 java

Apr 1st, 2023 (edited)
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.12 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.io.*;
  3. public class Permutations {
  4.     private static final Scanner scanner = new Scanner(System.in);
  5.     static Scanner fileScanner;
  6.     static int num = 1; // номер перестановки
  7.  
  8.     public static void main (String[] args) {
  9.         int num;
  10.         int[] arr;
  11.         System.out.println("the program generates all permutations of n elements in lexicographic order.");
  12.         System.out.println("Enter type of input." + '\n' + "1 is console input, 0 is file input.");
  13.         String path;
  14.         boolean chose = choose();
  15.         if (chose) {
  16.             System.out.println("Input size of plurality:");
  17.             num = inputArraySize();
  18.             System.out.println("Input plurality elements:");
  19.             arr = inputArray(num);
  20.         } else {
  21.             path = inputFilePath();
  22.             num = inputSizeOfArrayFromFile(path);
  23.             arr = inputArrayFile(path, num);
  24.         }
  25.         output(num, arr);
  26.     }
  27.  
  28.     private static boolean choose() {
  29.         int inputNumber = 0;
  30.         boolean isIncorrect;
  31.         final int MIN_NUM = 0;
  32.         final int MAX_NUM = 1;
  33.         do {
  34.             isIncorrect = false;
  35.             try {
  36.                 inputNumber = Integer.parseInt(scanner.nextLine());
  37.             } catch (Exception e) {
  38.                 isIncorrect = true;
  39.                 System.out.println("Please, enter a number.");
  40.             }
  41.             if (!isIncorrect && (inputNumber < MIN_NUM || inputNumber > MAX_NUM)) {
  42.                 System.out.println("You are out of input range!");
  43.                 isIncorrect = true;
  44.             }
  45.         } while (isIncorrect);
  46.         return inputNumber == 1;
  47.     }
  48.  
  49.     private static int inputData() {
  50.         int n = 0;
  51.         boolean isIncorrect;
  52.         do {
  53.             isIncorrect = false;
  54.             try {
  55.                 n = Integer.parseInt(scanner.nextLine());
  56.             } catch (Exception e) {
  57.                 isIncorrect = true;
  58.                 System.out.println("Please, enter a integer number:");
  59.             }
  60.         } while (isIncorrect);
  61.         return n;
  62.     }
  63.  
  64.     private static int inputArraySize() {
  65.         boolean isIncorrect;
  66.         final int MIN_SIZE = 2;
  67.         final int MAX_SIZE = 7;
  68.         int num;
  69.         do {
  70.             num = inputData();
  71.             isIncorrect = false;
  72.             if ((num < MIN_SIZE) || (num > MAX_SIZE)) {
  73.                 System.out.println("Array size should be in the range from 2 to 7:");
  74.                 isIncorrect = true;
  75.             }
  76.         } while (isIncorrect);
  77.         return num;
  78.     }
  79.  
  80.     private static int[] inputArray(int num) {
  81.         int[] arr = new int[num];
  82.         for (int i = 0; i < arr.length; i++)
  83.             arr[i] = inputData();
  84.         return arr;
  85.     }
  86.  
  87.     private static String inputFilePath() {
  88.         String path;
  89.         boolean isIncorrect;
  90.         do {
  91.             isIncorrect = false;
  92.             System.out.println("Input file path:");
  93.             path = scanner.nextLine();
  94.             File file = new File(path);
  95.             if (!file.exists()) {
  96.                 System.out.println("Wrong way to file.");
  97.                 isIncorrect = true;
  98.             }
  99.             if (!file.canRead() && file.exists()) {
  100.                 System.out.println("Impossible to read a file.");
  101.                 isIncorrect = true;
  102.             }
  103.             if (!file.canWrite() && file.canRead()) {
  104.                 System.out.println("Impossible to write a file.");
  105.                 isIncorrect = true;
  106.             }
  107.         } while (isIncorrect);
  108.         return path;
  109.     }
  110.     private static int inputSizeOfArrayFromFile(String path) {
  111.         int num = 0;
  112.         boolean isIncorrect;
  113.         final int MIN = 1;
  114.         final int MAX = 7;
  115.         do {
  116.             isIncorrect = false;
  117.             try {
  118.                 fileScanner = new Scanner(new File(path));
  119.                 num = fileScanner.nextInt();
  120.             } catch (Exception q) {
  121.                 isIncorrect = true;
  122.                 System.out.println("Check file.");
  123.                 path = inputFilePath();
  124.             }
  125.             if (!isIncorrect && ((num < MIN) || (num > MAX))) {
  126.                 isIncorrect = true;
  127.                 System.out.println("Array size should be in the range from 2 to 7:");
  128.                 path = inputFilePath();
  129.             }
  130.         } while (isIncorrect);
  131.         return num;
  132.     }
  133.  
  134.     private static int[] inputArrayFile(String path, int num) {
  135.         boolean isIncorrect;
  136.         int[] arr = new int[num];
  137.         do {
  138.             isIncorrect = false;
  139.             try {
  140.                 fileScanner = new Scanner(new File(path));
  141.                 fileScanner.nextLine();
  142.                 for (int i = 0; (i < arr.length); i++) {
  143.                     arr[i] = fileScanner.nextInt();
  144.                 }
  145.             } catch (Exception q) {
  146.                 isIncorrect = true;
  147.                 System.out.println("Reading of array elements failed.");
  148.                 path = inputFilePath();
  149.             }
  150.         } while (isIncorrect);
  151.         return arr;
  152.     }
  153.  
  154.     public static void swap(int[] arr, int i, int j)
  155.     {
  156.         int temp = arr[i];
  157.         arr[i] = arr[j];
  158.         arr[j] = temp;
  159.     }
  160.  
  161.     public static boolean nextSet(int[] arr, int n)
  162.     {
  163.         int j = n - 2;
  164.         while (j != -1 && arr[j] >= arr[j + 1])
  165.             j--;
  166.         if (j == -1)
  167.             return false; //закончились
  168.         int k = n - 1;
  169.         while (arr[j] >= arr[k])
  170.             k--;
  171.         swap(arr, j, k);
  172.         int l = j + 1;
  173.         int r = n - 1;
  174.         while (l < r)
  175.             swap(arr, l++, r--);
  176.         return true;
  177.     }
  178.  
  179.     public static void print (int[] arr, int n)  
  180.     {
  181.         System.out.print((num++) + ": ");
  182.         for (int i = 0; i < n; i++)
  183.             System.out.print(arr[i] + " ");
  184.         System.out.println();
  185.     }
  186.  
  187.     public static void output (int num, int[] arr) {
  188.         System.out.println(num + " elements:");
  189.         print(arr, num);
  190.         while (nextSet(arr, num))
  191.             print(arr, num);
  192.     }
  193.  
  194. }
  195.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement