I am new to Java, and I’m doing a calculator APP.
I’m trying to get my calculator to keep prompting the user for the correct answer (typing Y or N) after the else statement following ‘Invalid Input’.
I want the program to continue with the calculations after the correct input is finally entered.
I have played around with an embedded while
loop, but ended up with an infinite loop or a loop that terminates with no resolution. The code is below.
import java.util.Scanner; class Calculate { public static void.main(String[] args) { System.out.println("Welcome To Calculator!"); System.out.println("*************************************************************************"); Scanner userinput = new Scanner(System.in); double num1, num2; String choice; boolean youDecide = true; while(youDecide == true) { System.out.println("Please enter a number: "); num1 = userinput.nextDouble(); System.out.println("Please enter an available operator (+, -, *, /): "); char operator = userinput.next().charAt(0); System.out.println("Please enter another number: "); num2 = userinput.nextDouble(); double output; switch(operator) { case '+': output = num1 + num2; break; case '-': output = num1 - num2; break; case '*': output = num1 * num2; break; case '/': output = num1 / num2; if(num2 == 0) System.out.println("Math error! A number cannot be divided by zero."); break; default: System.out.println("Invalid input. Please enter an available operator, i.e (+, -, *, /): "); return; } System.out.println("*************************************************************************"); System.out.println("The answer is: " + "n" + output); System.out.println("*************************************************************************"); System.out.println("Would you like to calculate again?"); System.out.println("Please enter Y for yes, or N for no"); choice = userinput.next(); if(choice.equalsIgnoreCase("Y")) { System.out.println("Okay. Let's continue!"); System.out.println("*************************************************************************"); youDecide = true; } else if(choice.equalsIgnoreCase("N")) { System.out.println("*************************************************************************"); System.out.println("Okay. Thanks for using Calculator. Goodbye!"); System.exit(0); } else { System.out.println("Invalid input. Please try again..."); System.out.println("*************************************************************************"); youDecide = false; } } } }
Advertisement
Answer
After adding the edits suggested by J.F. and Javaman along with some research, I was able to solve the problem by adding the following lines to my code:
import java.util.InputMismatchException; import java.util.Scanner; class Calculator { public static void main(String[] args) { System.out.println("Welcome To Calculator!"); System.out.println("*************************************************************************"); Scanner userinput = new Scanner(System.in); char operator; double num1, num2; String choice; while(true) { System.out.println("Please enter a number: "); num1 = userinput.nextDouble(); System.out.println("Please enter an available operator (+, -, *, /): "); while(true) { operator = userinput.next().charAt(0); if(operator == '+' || operator == '-' || operator == '*' || operator == '/') { break; }else { System.out.println("Invalid input. Please enter an available operator, i.e (+, -, *, /): "); } } System.out.println("Please enter another number: "); num2 = userinput.nextDouble(); double output; switch(operator) { case '+': output = num1 + num2; break; case '-': output = num1 - num2; break; case '*': output = num1 * num2; break; case '/': output = num1 / num2; break; default: System.out.println("Invalid input. Please enter an available operator, i.e (+, -, *, /): "); continue; } System.out.println("*************************************************************************"); if(num2 == 0) { System.out.println("Math error! A number cannot be divided by zero."); }else { System.out.println("The answer is: " + "n" + output); } System.out.println("*************************************************************************"); System.out.println("Would you like to calculate again?"); System.out.println("Please enter Y for yes, or N for no"); choice = userinput.next(); if(choice.equalsIgnoreCase("Y")) { System.out.println("Okay. Let's continue!"); System.out.println("*************************************************************************"); }else if(choice.equalsIgnoreCase("N")) { System.out.println("*************************************************************************"); System.out.println("Okay. Thanks for using Calculator. Goodbye!"); System.exit(0); }else { System.out.println("Invalid input. Please try again..."); System.out.println("*************************************************************************"); **while (!("Y").equalsIgnoreCase(choice) && !("N").equalsIgnoreCase(choice)) { System.out.println("Invalid input. Please try again..."); System.out.println("*************************************************************************"); System.out.println("Please enter Y for yes, or N for no"); choice = userinput.next(); if(choice.equalsIgnoreCase("Y")) { System.out.println("Okay. Let's continue!"); System.out.println("*************************************************************************"); }else if(choice.equalsIgnoreCase("N")) { System.out.println("*************************************************************************"); System.out.println("Okay. Thanks for using Calculator. Goodbye!"); System.exit(0);** } } } } } }