Advertisement
Deianov

Array Manipulator

Feb 16th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.71 KB | None | 0 0
  1. // 11. Array Manipulator
  2.  
  3. package Exercise;
  4.  
  5. import java.util.Arrays;
  6. import java.util.Scanner;
  7.  
  8. public class E11 {
  9.     public static void main(String[] args) {
  10.         Scanner scanner = new Scanner(System.in);
  11.         String input = scanner.nextLine();
  12.         int[] arr = Arrays
  13.                 .stream(input.split("\\s+"))
  14.                 .mapToInt(Integer::parseInt)
  15.                 .toArray();
  16.  
  17.         while (!"end".equals(input = scanner.nextLine().toLowerCase())) {
  18.             String[] command = input.split("\\s+");
  19.             switch (command[0]) {
  20.                 case "exchange":
  21.                     exchange(arr, Integer.parseInt(command[1]));
  22.                     break;
  23.                 case "max":
  24.                     printMaxValue(arr, command[1].equals("even"));
  25.                     break;
  26.                 case "min":
  27.                     printMinValue(arr, command[1].equals("even"));
  28.                     break;
  29.                 case "first":
  30.                     printCountValues(arr, true, Integer.parseInt(command[1]), command[2].equals("even"));
  31.                     break;
  32.                 case "last":
  33.                     printCountValues(arr, false, Integer.parseInt(command[1]), command[2].equals("even"));
  34.                     break;
  35.             }
  36.         }
  37.         System.out.println(Arrays.toString(arr));
  38.     }
  39.  
  40.     private static void exchange(int[] arr, int index) {
  41.         int length = arr.length;
  42.         int[] temp = new int[length];
  43.  
  44.         if (index < 0 || index >= length) {
  45.             System.out.println("Invalid index");
  46.             return;
  47.         }
  48.         if (index == length - 1) {return;}
  49.  
  50.         int split = index + 1;
  51.         for (int i = 0; i < length ; i++) {
  52.             if (split >= length) split = 0;
  53.             temp[i] = arr[split++];
  54.         }
  55.         System.arraycopy(temp,0,arr,0,length);
  56.     }
  57.  
  58.     private static void printMaxValue (int[] array, boolean isEven) {
  59.         int maxValue = Integer.MIN_VALUE;
  60.         int maxValueIndex = -1;
  61.         int caseEvenOdd = isEven ? 0 : 1;
  62.  
  63.         for (int i = 0; i < array.length ; i++) {
  64.             if (array[i] % 2 == caseEvenOdd && array[i] >= maxValue) {
  65.                 maxValue = array[i];
  66.                 maxValueIndex = i;
  67.             }
  68.         }
  69.         System.out.println(maxValueIndex > -1 ? maxValueIndex : "No matches");
  70.     }
  71.  
  72.     private static void printMinValue(int[] array, boolean isEven) {
  73.         int minValue = Integer.MAX_VALUE;
  74.         int minValueIndex = -1;
  75.         int caseEvenOdd = isEven ? 0 : 1;
  76.  
  77.         for (int i = 0; i < array.length ; i++) {
  78.             if (array[i] % 2 == caseEvenOdd && array[i] <= minValue) {
  79.                 minValue = array[i];
  80.                 minValueIndex = i;
  81.             }
  82.         }
  83.         System.out.println(minValueIndex > -1 ? minValueIndex : "No matches");
  84.     }
  85.  
  86.     private static void printCountValues(int[] array, boolean isFirst, int count, boolean isEven) {
  87.         if (count < 0 || count > array.length) {
  88.             System.out.println("Invalid count");
  89.             return;
  90.         }
  91.  
  92.         int caseEvenOdd = isEven ? 0 : 1;
  93.         int countAdded = 0;
  94.         int[] temp = new int[array.length];
  95.  
  96.         for (int number: array) {
  97.             if (number % 2 == caseEvenOdd) {
  98.                 temp[countAdded++] = number;
  99.             }
  100.         }
  101.  
  102.         if (count == 0 || countAdded == 0) {
  103.             System.out.println("[]");
  104.             return;
  105.         }
  106.  
  107.         int indexStart = isFirst ? 0 : countAdded - Math.min(count, countAdded);
  108.         int indexEnd = indexStart + Math.min(count, countAdded);
  109.         System.out.println(Arrays.toString(Arrays.stream(temp, indexStart, indexEnd).toArray()));
  110.     }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement