Advertisement
steef_br

ArrayManipulator

Apr 17th, 2021
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.09 KB | None | 0 0
  1. package FundamentalsModule.MethodsMoreExcercises;
  2.  
  3.  
  4. import java.util.Arrays;
  5. import java.util.Scanner;
  6.  
  7.  
  8. public class ArrayManipulator {
  9.  
  10. public static void main(String[] args) {
  11. Scanner scanner = new Scanner(System.in);
  12.  
  13. int[] intArray = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
  14.  
  15. String command = scanner.nextLine();
  16. while (!command.equals("end")) {
  17. String[] inputArr = command.split(" ");
  18.  
  19. switch (inputArr[0]) {
  20. case "exchange":
  21. int index = Integer.parseInt(inputArr[1]);
  22. if (index >= 0 && index < intArray.length) {
  23. intArray = rotateArray(intArray, index);
  24. } else {
  25. System.out.println("Invalid index");
  26. }
  27. break;
  28. case "max":
  29. printMaxOddOrEven(inputArr[1], intArray);
  30. break;
  31. case "min":
  32. printMinOddEven(inputArr[1], intArray);
  33. break;
  34.  
  35. case "first":
  36. case "last":
  37. int count = Integer.parseInt(inputArr[1]);
  38. print1stOrLast(intArray, inputArr[0], count, inputArr[2]);
  39. }
  40.  
  41. command = scanner.nextLine();
  42. }
  43. System.out.println(Arrays.toString(intArray));
  44. }
  45.  
  46. private static void print1stOrLast(int[] array, String firstOrLast, int count, String evenOrOdd) {
  47.  
  48. if (count > array.length) {
  49. System.out.println("Invalid count");
  50. } else {
  51.  
  52. int[] outputArray = new int[0];
  53. int tempIndex = 1;
  54. switch (firstOrLast) {
  55. case "first":
  56. for (int i = 0; i < array.length; i++) {
  57. if (array[i] % 2 == 0 && evenOrOdd.equals("even")) {
  58. if (tempIndex <= count) {
  59. outputArray = Arrays.copyOf(outputArray, tempIndex);
  60. outputArray[tempIndex-1] = array[i];
  61. tempIndex++;
  62. } else {
  63. break;
  64. }
  65. } else if (array[i] % 2 != 0 && evenOrOdd.equals("odd")) {
  66. if (tempIndex <= count) {
  67. outputArray = Arrays.copyOf(outputArray, tempIndex);
  68. outputArray[tempIndex-1] = array[i];
  69. tempIndex++;
  70. } else {
  71. break;
  72. }
  73. }
  74. }
  75. System.out.println(Arrays.toString(outputArray));
  76. break;
  77. case "last":
  78.  
  79. for (int i = array.length - 1; i >= 0; i--) {
  80.  
  81. if (array[i] % 2 == 0 && evenOrOdd.equals("even")) {
  82. if (count > 0) {
  83. count--;
  84. outputArray = Arrays.copyOf(outputArray, tempIndex);
  85. outputArray[tempIndex - 1] = array[i];
  86. tempIndex++;
  87. } else {
  88. break;
  89. }
  90. } else if (array[i] % 2 != 0 && evenOrOdd.equals("odd")) {
  91. if (count > 0) {
  92. count--;
  93. outputArray = Arrays.copyOf(outputArray, tempIndex);
  94. outputArray[tempIndex - 1] = array[i];
  95. tempIndex++;
  96. } else {
  97. break;
  98. }
  99. }
  100. }
  101. System.out.println(Arrays.toString(reveriseArray(outputArray)));
  102. }
  103. }
  104. }
  105.  
  106. private static int[] reveriseArray(int[] outputArray) {
  107.  
  108. int[] reverseArray = new int[outputArray.length];
  109. for (int i = outputArray.length - 1; i >= 0; i--) {
  110. reverseArray[i] = outputArray[i];
  111. }
  112. return reverseArray;
  113. }
  114. private static int[] rotateArray(int[] array, int rotateIndex) {
  115.  
  116. int[] leftArr = new int[rotateIndex + 1];
  117. int[] rightArr = new int[array.length - leftArr.length];
  118.  
  119. for (int i = 0; i < leftArr.length; i++) {
  120. leftArr[i] = array[i];
  121. }
  122. int tempIndex = 0;
  123. for (int i = rotateIndex + 1; i < array.length; i++) {
  124. rightArr[tempIndex] = array[i];
  125. tempIndex++;
  126. }
  127.  
  128. int[] newArray = new int[array.length];
  129.  
  130. for (int i = 0; i < rightArr.length; i++) {
  131. newArray[i] = rightArr[i];
  132. }
  133.  
  134. for (int i = rightArr.length; i < array.length; i++) {
  135. newArray[i] = array[i - rightArr.length];
  136. }
  137. return newArray;
  138. }
  139.  
  140. private static void printMinOddEven(String oddOrEven, int[] array) {
  141. int minEven = Integer.MAX_VALUE;
  142. int minOdd = Integer.MAX_VALUE;
  143. int minEvenIndex = 0;
  144. int minOddIndex = 0;
  145. boolean evenFound = false;
  146. boolean oddFound = false;
  147.  
  148. for (int i = 0; i < array.length; i++) {
  149. if (array[i] % 2 == 0 && array[i] <= minEven) {
  150. minEven = array[i];
  151. minEvenIndex = i;
  152. evenFound = true;
  153. } else if (array[i] % 2 != 0 && array[i] <= minOdd) {
  154. minOdd = array[i];
  155. minOddIndex = i;
  156. oddFound = true;
  157. }
  158. }
  159. if (oddOrEven.equals("even") && evenFound) {
  160. System.out.println(minEvenIndex);
  161. } else if (oddOrEven.equals("odd") && oddFound) {
  162. System.out.println(minOddIndex);
  163. } else {
  164. System.out.println("No matches");
  165. }
  166. }
  167.  
  168.  
  169. private static void printMaxOddOrEven(String oddOrEven, int[] array) {
  170.  
  171. int maxEven = Integer.MIN_VALUE;
  172. int maxOdd = Integer.MIN_VALUE;
  173. int mmaxEvenIndex = 0;
  174. int mmaxOddIndex = 0;
  175. boolean evenFound = false;
  176. boolean oddFound = false;
  177. for (int i = 0; i < array.length; i++) {
  178. if (array[i] % 2 != 0 && array[i] >= maxOdd) {
  179. maxOdd = array[i];
  180. mmaxOddIndex = i;
  181. oddFound = true;
  182. } else if (array[i] % 2 == 0 && array[i] >= maxEven) {
  183. maxEven = array[i];
  184. mmaxEvenIndex = i;
  185. evenFound = true;
  186. }
  187. }
  188. if (oddOrEven.equals("even") && evenFound) {
  189. System.out.println(mmaxEvenIndex);
  190. } else if (oddOrEven.equals("odd") && oddFound) {
  191. System.out.println(mmaxOddIndex);
  192. } else {
  193. System.out.println("No matches");
  194. }
  195. }
  196.  
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement