Advertisement
CoineTre

JF-ExcMethods11.Array Manipulator

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