Advertisement
Vladislav8653

4.2 java

Mar 14th, 2023 (edited)
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.75 KB | None | 0 0
  1. ъimport java.util.Scanner;
  2. import java.io.*;
  3. public class BinarySearch {
  4.     public static Scanner scan = new Scanner(System.in);
  5.     static Scanner fileScanner;
  6.  
  7.     public static void main(String[] args) {
  8.         int num;
  9.         int key;
  10.         int[] arr;
  11.         System.out.println("Program implements Binary Search - search of element in array");
  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.         boolean isIncorrect;
  16.         if (chose) {
  17.             System.out.println("Input size of array:");
  18.             num = inputArraySize();
  19.             do {
  20.                 System.out.println("Input array elements:");
  21.                 arr = inputArray(num);
  22.                 isIncorrect = checkArray(arr);
  23.             } while (!isIncorrect);
  24.             System.out.println("Input number for search:");
  25.             key = inputData();
  26.         } else {
  27.             do {
  28.                 path = inputFilePath();
  29.                 num = inputSizeOfArrayFromFile(path);
  30.                 arr = inputArrayFile(path, num);
  31.                 isIncorrect = checkArray(arr);
  32.             } while (!isIncorrect);
  33.             key = inputKeyFromFile(path);
  34.         }
  35.         output(arr, key, num);
  36.     }
  37.  
  38.     private static void output (int [] arr, int key, int num){
  39.         int result = searchElement(arr, key, 0, num - 1);
  40.         if (result == -1) {
  41.             System.out.println("The element you are looking for is not in the array.");
  42.         } else {
  43.             System.out.println("The item you are looking for is on " + (result + 1) + " place");
  44.         }
  45.     }
  46.  
  47.     private static boolean choose() {
  48.         int inputNumber = 0;
  49.         boolean isIncorrect;
  50.         final int MIN_NUM = 0;
  51.         final int MAX_NUM = 1;
  52.         do {
  53.             isIncorrect = false;
  54.             try {
  55.                 inputNumber = Integer.parseInt(scan.nextLine());
  56.             } catch (Exception e) {
  57.                 isIncorrect = true;
  58.                 System.out.println("Please, enter a number.");
  59.             }
  60.             if (!isIncorrect && (inputNumber < MIN_NUM || inputNumber > MAX_NUM)) {
  61.                 System.out.println("You are out of input range!:");
  62.                 isIncorrect = true;
  63.             }
  64.         } while (isIncorrect);
  65.         return inputNumber == 1;
  66.     }
  67.     private static int inputData() {
  68.         int n = 0;
  69.         boolean isIncorrect;
  70.         do {
  71.             isIncorrect = false;
  72.             try {
  73.                 n = Integer.parseInt(scan.nextLine());
  74.             } catch (Exception e) {
  75.                 isIncorrect = true;
  76.                 System.out.println("Please, enter a integer number:");
  77.             }
  78.         } while (isIncorrect);
  79.         return n;
  80.     }
  81.  
  82.     private static int inputArraySize() {
  83.         boolean isIncorrect;
  84.         final int MIN_SIZE = 2;
  85.         final int MAX_SIZE = 10;
  86.         int num;
  87.         do {
  88.             num = inputData();
  89.             isIncorrect = false;
  90.             if ((num < MIN_SIZE) || (num > MAX_SIZE)) {
  91.                 System.out.println("Please, enter a number in the range from 2 to 10:");
  92.                 isIncorrect = true;
  93.             }
  94.         } while (isIncorrect);
  95.         return num;
  96.     }
  97.  
  98.     private static int[] inputArray(int num) {
  99.         int[] arr = new int[num];
  100.         for (int i = 0; i < arr.length; i++)
  101.             arr[i] = inputData();
  102.         return arr;
  103.     }
  104.  
  105.     private static boolean checkArray (int[] arr) {
  106.         int i = 0;
  107.         boolean ascending = true; // возрастание
  108.         boolean descending = true; // убывание
  109.         while ((i < arr.length - 1) && (descending)) {
  110.             if (arr[i] <= arr[i + 1]) {
  111.                 descending = false; // проверка на убывание
  112.             }
  113.             i++;
  114.         }
  115.         i = 0;
  116.         while ((i < arr.length - 1) && (ascending)) {
  117.             if (arr[i] >= arr[i + 1]) {
  118.                 ascending = false; // проверка на возрастание
  119.             }
  120.             i++;
  121.         }
  122.         boolean isInCorrect = true;
  123.         if ((!ascending) && (!descending)) {
  124.             System.out.println("Enter a sorted array, since binary search is only possible in such.");
  125.             isInCorrect = false;
  126.         }
  127.         return isInCorrect;
  128.     }
  129.  
  130.     private static int searchElement(int[] arr, int key, int left, int right) {
  131.         if (left <= right) {
  132.             int mid = left + ((right - left) / 2);
  133.             if (arr[mid] == key) {
  134.                 return mid;
  135.             } else if (arr[mid] < key) {
  136.                 return searchElement(arr, key, mid + 1, right);
  137.             } else {
  138.                 return searchElement(arr, key, left, mid - 1);
  139.             }
  140.         }
  141.         return -1;
  142.     }
  143.  
  144.     //files
  145.     private static String inputFilePath() {
  146.         String path;
  147.         boolean isIncorrect;
  148.         do {
  149.             isIncorrect = false;
  150.             System.out.println("Input file path:");
  151.             path = scan.nextLine();
  152.             File file = new File(path);
  153.             if (!file.exists()) {
  154.                 System.out.println("Wrong way to file.");
  155.                 isIncorrect = true;
  156.             }
  157.             if (!file.canRead() && file.exists()) {
  158.                 System.out.println("Impossible to read a file.");
  159.                 isIncorrect = true;
  160.             }
  161.             if (!file.canWrite() && file.canRead()) {
  162.                 System.out.println("Impossible to write a file.");
  163.                 isIncorrect = true;
  164.             }
  165.         } while (isIncorrect);
  166.         return path;
  167.     }
  168.     private static int inputSizeOfArrayFromFile(String path) {
  169.         int num = 0;
  170.         boolean isIncorrect;
  171.         final int MIN = 1;
  172.         final int MAX = 10;
  173.         do {
  174.             isIncorrect = false;
  175.             try {
  176.                 fileScanner = new Scanner(new File(path));
  177.                 num = fileScanner.nextInt();
  178.             } catch (Exception q) {
  179.                 isIncorrect = true;
  180.                 System.out.println("Check file");
  181.                 path = inputFilePath();
  182.             }
  183.             if (!isIncorrect && ((num < MIN) || (num > MAX))) {
  184.                 isIncorrect = true;
  185.                 System.out.println("Matrix size should be in the range from 2 to 10:");
  186.                 path = inputFilePath();
  187.             }
  188.         } while (isIncorrect);
  189.         return num;
  190.     }
  191.     private static int inputKeyFromFile(String path) {
  192.         int num = 0;
  193.         boolean isIncorrect;
  194.         do {
  195.             isIncorrect = false;
  196.             try {
  197.                 fileScanner = new Scanner(new File(path));
  198.                 fileScanner.nextLine();
  199.                 fileScanner.nextLine();
  200.                 num = fileScanner.nextInt();
  201.             } catch (Exception q) {
  202.                 isIncorrect = true;
  203.                 System.out.println("Check file");
  204.                 path = inputFilePath();
  205.             }
  206.         } while (isIncorrect);
  207.         return num;
  208.     }
  209.  
  210.     private static int[] inputArrayFile(String path, int num) {
  211.         boolean isIncorrect;
  212.         int[] arr = new int[num];
  213.         do {
  214.             isIncorrect = false;
  215.             try {
  216.                 fileScanner = new Scanner(new File(path));
  217.                 fileScanner.nextLine();
  218.                 for (int i = 0; (i < arr.length); i++) {
  219.                     arr[i] = fileScanner.nextInt();
  220.                 }
  221.             } catch (Exception q) {
  222.                 isIncorrect = true;
  223.                 System.out.println("Reading of array elements failed.");
  224.                 path = inputFilePath();
  225.             }
  226.         } while (isIncorrect);
  227.         return arr;
  228.     }
  229. }
  230.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement