import [Link].
BufferedReader;
import [Link];
import [Link];
public class DynamicArrayMenu {
private static int[] arr = new int[0]; // start with empty array
// Create new array with given size
private static void createArray(int size, BufferedReader br) throws IOException
{
arr = new int[size];
[Link]("Enter " + size + " elements:");
for (int i = 0; i < size; i++) {
[Link]("Element " + (i + 1) + ": ");
arr[i] = [Link]([Link]());
}
}
// Reset array
private static void resetArray() {
arr = new int[0];
[Link]("Array has been reset (cleared).");
}
// Display array
private static void displayArray() {
if ([Link] == 0) {
[Link]("Array is empty.");
return;
}
[Link]("Array: [");
for (int i = 0; i < [Link]; i++) {
[Link](arr[i]);
if (i < [Link] - 1) [Link](", ");
}
[Link]("]");
}
// (a) Sum of highest odd + highest even
private static void sumOddEven() {
int highestOdd = Integer.MIN_VALUE;
int highestEven = Integer.MIN_VALUE;
for (int num : arr) {
if (num % 2 == 0 && num > highestEven) highestEven = num;
if (num % 2 != 0 && num > highestOdd) highestOdd = num;
}
if (highestOdd == Integer.MIN_VALUE || highestEven == Integer.MIN_VALUE) {
[Link]("Array must contain both odd and even numbers.");
} else {
[Link]("Highest odd number: " + highestOdd);
[Link]("Highest even number: " + highestEven);
[Link]("Sum: " + (highestOdd + highestEven));
}
}
// (b) Display indices of occurrences
private static void findIndices(int value) {
boolean found = false;
[Link]("Element " + value + " found at indices: ");
for (int i = 0; i < [Link]; i++) {
if (arr[i] == value) {
if (found) [Link](", ");
[Link](i);
found = true;
}
}
if (!found) [Link]("none");
[Link]();
}
// (c) Replace all occurrences of a value
private static void replaceAll(int oldValue, int newValue) {
for (int i = 0; i < [Link]; i++) {
if (arr[i] == oldValue) {
arr[i] = newValue;
}
}
displayArray();
}
// (d) Find second largest element (without sorting)
private static void secondLargest() {
int largest = Integer.MIN_VALUE;
int second = Integer.MIN_VALUE;
for (int num : arr) {
if (num > largest) {
second = largest;
largest = num;
} else if (num > second && num != largest) {
second = num;
}
}
if (second == Integer.MIN_VALUE) {
[Link]("No second largest element (array may have
duplicates or be too small).");
} else {
[Link]("Second largest element: " + second);
}
}
// (e) Remove duplicates while preserving order
private static void removeDuplicates() {
int[] temp = new int[[Link]];
int newSize = 0;
for (int i = 0; i < [Link]; i++) {
boolean exists = false;
for (int j = 0; j < newSize; j++) {
if (arr[i] == temp[j]) {
exists = true;
break;
}
}
if (!exists) {
temp[newSize++] = arr[i];
}
}
// copy back into arr
arr = new int[newSize];
for (int i = 0; i < newSize; i++) {
arr[i] = temp[i];
}
displayArray();
}
// Main menu
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader([Link]));
int choice;
do {
[Link]("\n==== Dynamic Array Menu ====");
[Link]("1. Create a new dynamic array");
[Link]("2. Reset (clear) the array");
[Link]("3. Sum of highest odd and even");
[Link]("4. Display indices of element");
[Link]("5. Replace all occurrences of a value");
[Link]("6. Find the second largest element");
[Link]("7. Remove duplicates");
[Link]("8. Display array");
[Link]("9. EXIT");
[Link]("Enter choice: ");
choice = [Link]([Link]());
switch (choice) {
case 1:
[Link]("Enter size of array: ");
int size = [Link]([Link]());
createArray(size, br);
break;
case 2:
resetArray();
break;
case 3:
sumOddEven();
break;
case 4:
[Link]("Enter element to search: ");
int val = [Link]([Link]());
findIndices(val);
break;
case 5:
[Link]("Enter value to replace: ");
int oldVal = [Link]([Link]());
[Link]("Enter new value: ");
int newVal = [Link]([Link]());
replaceAll(oldVal, newVal);
break;
case 6:
secondLargest();
break;
case 7:
removeDuplicates();
break;
case 8:
displayArray();
break;
case 9:
[Link]("Exiting program...");
break;
default:
[Link]("Invalid choice. Try again.");
}
} while (choice != 9);
}
}