I have to create a calculator in Java. Everything works ok so far, except I can't quite figure out how to produce an error message when somebody enters a value that is not an integer when it asks for a number. I tried a "try, catch" statement but it still throws me an error in the IDE which is :
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
here is the code for the rest of my program:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Calculator {
static int num1, num2;
static int memory;
static String operation;
static String menu = "\nChoose an operation:\n+ Add\n- Subtract\n* Multiply\n/ Divide\n^ Exponent\n~ Square Root\n Exit";
static boolean run = true;
public static void menu (String menu){
System.out.println (menu);
};
public static void add (int num1, int num2) {
System.out.println (num1 +num2);}
public static void subtract (int num1, int num2) {
System.out.println (num1 - num2);
};
public static void multiply (int num1, int num2) {
System.out.println (num1 * num2);
};
public static void divide (int num1, int num2) {
if (num2 !=0) {
System.out.println (num1/num2);}
else{
System.out.println ("Cannot divide by 0");
};
};
public static void exp (int num1, int num2) {
System.out.println (Math.pow(num1,num2));
};
public static void sqrt (int num1) {
System.out.println (Math.sqrt(num1));
};
public static void main(String[] args) {
Scanner scanner = new Scanner (System.in);
do{
menu(menu);
operation = scanner.next();
try {
switch (operation) {
case "+":
System.out.println ("Enter first number:");
num1 = scanner.nextInt();
System.out.println ("Please enter a valid number");
System.out.println ("Enter second number:");
num2 = scanner.nextInt();
add (num1,num2);
break;
case "-":
System.out.println ("Enter first number:");
num1 = scanner.nextInt();
System.out.println ("Enter second number:");
num2 = scanner.nextInt();
subtract (num1, num2);
break;
case "*":
System.out.println ("Enter first number:");
num1 = scanner.nextInt();
System.out.println ("Enter second number:");
num2 = scanner.nextInt();
multiply (num1, num2);
break;
case "/":
System.out.println ("Enter first number:");
num1 = scanner.nextInt();
System.out.println ("Enter second number:");
num2 = scanner.nextInt();
divide (num1, num2);
break;
case "^":
System.out.println ("Enter first number:");
num1 = scanner.nextInt();
System.out.println ("Enter exponent:");
num2 = scanner.nextInt();
exp (num1, num2);
break;
case "~":
System.out.println ("Enter number:");
num1 = scanner.nextInt();
sqrt(num1);
break;
case "Exit":
System.out.println("You have exited the calculator");
System.exit(0);
run = false;
break;
default:
System.out.println("Invalid");
}
}catch (InputMismatchException e) {
}
}while(run == true);
scanner.close();
}
};
thanks!
ok update: i got the try catch to throw the error, but when i run it with the error, it runs the default case of the switch statement, and then runs again (so you see the menu twice) and I only need it to show up once