Advertisement
Vladislav8653

5.3 java

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