This Program is a simple phonebook, user is given 3 choice, add a number to the phone book, dial a number or exit the program. Are there Any Improvements that i can make, either efficient or cleaning the code or something useful i can add?
import java.util.ArrayList;
import java.util.Scanner;
public class PhoneBookV2 {
public static void main(String[] args){
final ArrayList<String> numbers = new ArrayList<>();
print(numbers);
task(numbers);
}
public static void task(ArrayList<String> numbers){
Scanner scan = new Scanner(System.in);
System.out.println("Please Pick A Task: \n 1:Add A Number to Speed Dial \n 2:Speed Dial A Number \n 3:Exit");
String choice = scan.nextLine();
switch(choice){
case "1":
AddNumber(numbers);
break;
case "2":
CallNumber(numbers);
break;
case "3":
System.out.println("Goodbye!");
System.exit(0);
break;
}
}
private static void CallNumber(ArrayList<String> numbers) {
Scanner scan = new Scanner(System.in);
try {
String[][] keys = {
{" ", "1", " ", "2", " ", "3"},
{" ", "4", " ", "5", " ", "6"},
{" ", "7", " ", "8", " ", "9"},
{" ", " ", " ", "0", " ", " "}
};
printPhoneBook(keys);
System.out.println("Pick A Speed Dial Number");
int choice = Integer.parseInt(scan.nextLine());
String phoneNum = "";
switch (choice) {
case 1 -> phoneNum = numbers.get(0);
case 2 -> phoneNum = numbers.get(1);
case 3 -> phoneNum = numbers.get(2);
case 4 -> phoneNum = numbers.get(3);
case 5 -> phoneNum = numbers.get(4);
case 6 -> phoneNum = numbers.get(5);
case 7 -> phoneNum = numbers.get(6);
case 8 -> phoneNum = numbers.get(7);
case 9 -> phoneNum = numbers.get(8);
case 0 -> phoneNum = numbers.get(9);
default -> System.out.println("No Number Saved At " + choice);
}
if (phoneNum != null) System.out.println("Dialing " + phoneNum + "....");
else System.out.println("There is No Number At This Location");
PhoneBookV2.task(numbers);
} catch(IndexOutOfBoundsException e) {
System.out.println("There is No Number At This Location");
PhoneBookV2.task(numbers);
}
}
private static ArrayList<String> AddNumber(ArrayList<String> numbers) {
Scanner scanner = new Scanner(System.in);
boolean cont = false;
do {
System.out.print("Please Enter The Number You Wish To Save Under Speed Dial: ");
// Add the next number to the ArrayList
numbers.add(scanner.nextLine());
System.out.print("Would you like to add another? Yes or No: ");
String answer = scanner.nextLine().toLowerCase();
if (answer.equals("yes")) continue;
if (answer.equals("no")) {
print(numbers);
cont = true;
}
} while (!cont);
PhoneBookV2.task(numbers);
return numbers;
}
public static void printPhoneBook(String[][] keys){
for(String[] row : keys){
for(String s : row){
System.out.print(s);
}
System.out.println();
}
}
public static void print(ArrayList<String> numbers){
for(int i = 0; i< numbers.size(); i++){
System.out.println((i+1) + ") " + numbers.get(i));
}
}
}
```