The code in the main():
public static void main(String[] args) {
int menu = menu();
if (menu == 0) {
System.out.print("End program");
}
if (menu == 1) {
}
if (menu == 2) {
System.out.print("Enter the Capacity>");
double capacity = sc.nextDouble();
if (capacity <= 0) {
System.out.println("Wrong input");
menu = menu();
}
}
}
And this is the menu() method:
public static int menu() {
System.out.println("0. End program");
System.out.println("1. No Caps");
System.out.println("2. Knapsack Problem");
System.out.println("3. Count Ways");
System.out.println("4. Merge Strings");
System.out.println("5. Password Generator");
System.out.print("Enter a digit 0-5>");
int choice = sc.nextInt();
if (choice > 5 || choice < 0) {
System.out.println("Wrong input");
return menu();
}
return choice;
}
My problem is that I need the program to run from the beginning in case if use enters capacity <= 0.
Right now it's only printing the menu, but after I choose a menu option it exits even if capacity <= 0. I.e. the program is not checking if capacity is smaller than 0 again.
How can I fix that?
I cannot use loops - that is the requirement of my assignment.
CodePudding user response:
Since you're not allowed to use loops, then you need to extract conditional logic into a separate method which will be called from the main().
Lets call it start(). In case when the user provides a negative capacity for the Knapsack Problem (option 2) we should invoke start() recursively.
public static void main(String[] args) {
start();
}
public static void start() {
int menu = menu();
if (menu == 0) {
System.out.print("End program");
}
if (menu == 1) {
}
if (menu == 2) {
System.out.print("Enter the Capacity>");
double capacity = sc.nextDouble();
if (capacity <= 0) {
System.out.println("Wrong input");
start(); // calling `start()` recursively
}
System.out.println("Capacity: " capacity);
}
}
static int menu() {
System.out.println("0. End program");
System.out.println("1. No Caps");
System.out.println("2. Knapsack Problem");
System.out.println("3. Count Ways");
System.out.println("4. Merge Strings");
System.out.println("5. Password Generator");
System.out.print("Enter a digit 0-5>");
int choice = sc.nextInt();
if (choice > 5 || choice < 0) {
System.out.println("Wrong input");
return menu();
}
return choice;
}
