Advertisement
Lyubohd

11. Array Manipulator

Jun 12th, 2020
1,163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.94 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4.     public static void main(String[] args) {
  5.         Scanner scan = new Scanner(System.in);
  6.         String[] data = scan.nextLine().split(" ");
  7.         int[] array = new int[data.length];
  8.         for (int i = 0; i < data.length; i++) {
  9.             array[i] = Integer.parseInt(data[i]);
  10.         }
  11.  
  12.         String input = scan.nextLine();
  13.         while (!"end".equals(input)) {
  14.             String[] tokens = input.split(" ");
  15.             String command = tokens[0];
  16.             switch (command) {
  17.                 case "exchange": {
  18.                     int index = Integer.parseInt(tokens[1]);
  19.                     if (index < 0 || index >= array.length) {
  20.                         System.out.println("Invalid index");
  21.                     } else {
  22.                         exchange(array, index);
  23.                     }
  24.                 }
  25.                 break;
  26.                 case "min": {
  27.                     String evenOrOdd = tokens[1];
  28.                     if (evenOrOdd.equals("even")) {
  29.                         findMinEven(array);
  30.                     } else if (evenOrOdd.equals("odd")) {
  31.                         findMinOdd(array);
  32.                     }
  33.                 }
  34.                 break;
  35.                 case "max": {
  36.                     String evenOrOdd = tokens[1];
  37.                     if (evenOrOdd.equals("even")) {
  38.                         findMaxEven(array);
  39.                     } else if (evenOrOdd.equals("odd")) {
  40.                         findMaxOdd(array);
  41.                     }
  42.                 }
  43.                 break;
  44.                 case "first": {
  45.                     int count = Integer.parseInt(tokens[1]);
  46.                     if (count > array.length) {
  47.                         System.out.println("Invalid count");
  48.                     } else {
  49.                         String evenOrOdd = tokens[2];
  50.                         if (evenOrOdd.equals("even")) {
  51.                             findFirstCountEvenNumbers(array, count);
  52.                         } else if (evenOrOdd.equals("odd")) {
  53.                             findFirstCountOddNumbers(array, count);
  54.                         }
  55.                     }
  56.  
  57.                 }
  58.                 break;
  59.                 case "last": {
  60.                     int count = Integer.parseInt(tokens[1]);
  61.                     if (count > array.length) {
  62.                         System.out.println("Invalid count");
  63.                     } else {
  64.                         String evenOrOdd = tokens[2];
  65.                         if (evenOrOdd.equals("even")) {
  66.                             findLastCountEvenNumbers(array, count);
  67.                         } else if (evenOrOdd.equals("odd")) {
  68.                             findLastCountOddNumbers(array, count);
  69.                         }
  70.                     }
  71.                 }
  72.                 break;
  73.             }
  74.  
  75.             input = scan.nextLine();
  76.         }
  77.  
  78.         printArray(array);
  79.     }
  80.  
  81.     private static void findLastCountOddNumbers(int[] array, int count) {
  82.         int[] result = new int[0];
  83.         for (int i = array.length - 1; i >= 0; i--) {
  84.             if (array[i] % 2 != 0) {
  85.                 result = expandAndAddToArray(result, array[i]);
  86.                 if (result.length == count) {
  87.                     break;
  88.                 }
  89.             }
  90.         }
  91.         reverseArray(result);
  92.         printArray(result);
  93.     }
  94.  
  95.     private static void findLastCountEvenNumbers(int[] array, int count) {
  96.         int[] result = new int[0];
  97.         for (int i = array.length - 1; i >= 0; i--) {
  98.             if (array[i] % 2 == 0) {
  99.                 result = expandAndAddToArray(result, array[i]);
  100.                 if (result.length == count) {
  101.                     break;
  102.                 }
  103.             }
  104.         }
  105.         reverseArray(result);
  106.         printArray(result);
  107.     }
  108.  
  109.     private static void reverseArray(int[] array) {
  110.         int[] temp = copyArray(array);
  111.         for (int i = array.length - 1; i >= 0; i--) {
  112.             array[i] = temp[array.length - 1 - i];
  113.         }
  114.     }
  115.  
  116.     private static void findFirstCountOddNumbers(int[] array, int count) {
  117.         int[] result = new int[0];
  118.         for (int i = 0; i < array.length; i++) {
  119.             if (array[i] % 2 != 0) {
  120.                 result = expandAndAddToArray(result, array[i]);
  121.                 if (result.length == count) {
  122.                     break;
  123.                 }
  124.             }
  125.         }
  126.         printArray(result);
  127.     }
  128.  
  129.     private static void findFirstCountEvenNumbers(int[] array, int count) {
  130.         int[] result = new int[0];
  131.         for (int i = 0; i < array.length; i++) {
  132.             if (array[i] % 2 == 0) {
  133.                 result = expandAndAddToArray(result, array[i]);
  134.                 if (result.length == count) {
  135.                     break;
  136.                 }
  137.             }
  138.         }
  139.         printArray(result);
  140.     }
  141.  
  142.     private static void printArray(int[] array) {
  143.         System.out.print("[");
  144.         for (int i = 0; i < array.length; i++) {
  145.             if (i == 0) {
  146.                 System.out.print(array[i]);
  147.             } else {
  148.                 System.out.print(", " + array[i]);
  149.             }
  150.         }
  151.         System.out.println("]");
  152.     }
  153.  
  154.     private static int[] expandAndAddToArray(int[] oldArray, int newElement) {
  155.         int[] newArray = new int[oldArray.length + 1];
  156.         for (int i = 0; i < oldArray.length; i++) {
  157.             newArray[i] = oldArray[i];
  158.         }
  159.         newArray[newArray.length - 1] = newElement;
  160.         return newArray;
  161.     }
  162.  
  163.     private static void findMaxOdd(int[] array) {
  164.         int max = Integer.MIN_VALUE;
  165.         int index = -1;
  166.         for (int i = 0; i < array.length; i++) {
  167.             if (array[i] % 2 != 0 && max <= array[i]) {
  168.                 max = array[i];
  169.                 index = i;
  170.             }
  171.         }
  172.  
  173.         if (index == -1) {
  174.             System.out.println("No matches");
  175.         } else {
  176.             System.out.println(index);
  177.         }
  178.     }
  179.  
  180.     private static void findMaxEven(int[] array) {
  181.         int max = Integer.MIN_VALUE;
  182.         int index = -1;
  183.         for (int i = 0; i < array.length; i++) {
  184.             if (array[i] % 2 == 0 && max <= array[i]) {
  185.                 max = array[i];
  186.                 index = i;
  187.             }
  188.         }
  189.  
  190.         if (index == -1) {
  191.             System.out.println("No matches");
  192.         } else {
  193.             System.out.println(index);
  194.         }
  195.     }
  196.  
  197.     private static void findMinOdd(int[] array) {
  198.         int min = Integer.MAX_VALUE;
  199.         int index = -1;
  200.         for (int i = 0; i < array.length; i++) {
  201.             if (array[i] % 2 != 0 && min >= array[i]) {
  202.                 min = array[i];
  203.                 index = i;
  204.             }
  205.         }
  206.  
  207.         if (index == -1) {
  208.             System.out.println("No matches");
  209.         } else {
  210.             System.out.println(index);
  211.         }
  212.     }
  213.  
  214.     private static void findMinEven(int[] array) {
  215.         int min = Integer.MAX_VALUE;
  216.         int index = -1;
  217.         for (int i = 0; i < array.length; i++) {
  218.             if (array[i] % 2 == 0 && min >= array[i]) {
  219.                 min = array[i];
  220.                 index = i;
  221.             }
  222.         }
  223.  
  224.         if (index == -1) {
  225.             System.out.println("No matches");
  226.         } else {
  227.             System.out.println(index);
  228.         }
  229.     }
  230.  
  231.     public static void exchange(int[] array, int index) {
  232.         int[] temp = copyArray(array);
  233.         int count = 0;
  234.         for (int i = index + 1; i < temp.length; i++) {
  235.             array[count] = temp[i];
  236.             count++;
  237.         }
  238.  
  239.         for (int i = 0; i <= index; i++) {
  240.             array[count] = temp[i];
  241.             count++;
  242.         }
  243.     }
  244.  
  245.  
  246.     public static int[] copyArray(int[] arr) {
  247.         int[] newArray = new int[arr.length];
  248.         for (int i = 0; i < arr.length; i++) {
  249.             newArray[i] = arr[i];
  250.         }
  251.  
  252.         return newArray;
  253.     }
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement