'How to catch an Error in a Switch statement when the user entered number doesn't exist

I'm trying to error proof my program that basically works as a mini calculator. But I have no idea how to write a "Catch" statement that would detect when the user enters a case number that doesn't exist, in my case anything that is negative or > 4

        System.out.println("Hello user! Which operation would you like to use?");
        System.out.println("1) + \n2) - \n3) * \n4) /");


        Scanner operacijai = new Scanner(System.in);
        int operacija = operacijai.nextInt();


        int n=1;
        do {
        try {
            switch (operacija) {
            case 1:
                addingMethod();
                n=2;
                break;

            case 2:
                subtractingMethod();
                n=2;
                break;

            case 3:
                multiplyingMethod();
                n=2;
                break;

            case 4:
                dividingMethod();
                n=2;
                break;
                    }       
            }
            catch(Exception e) {
                System.out.print("Enter a correct number!");
            }

        } while(n==1);
        operacijai.close();

    } ```


Solution 1:[1]

Why do you want to throw an Exception unnecessarily? I suggest you just put a default case in your switch with the required error message. Also, move the input part inside the loop, so that it continues to take input.

I also suggest you use nextLine() instead of nextInt(). Check Scanner is skipping nextLine() after using next() or nextFoo()? to learn more about it.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello user! Which operation would you like to use?");
        System.out.println("1) + \n2) - \n3) * \n4) /");
        Scanner operacijai = new Scanner(System.in);
        int operacija = 0, n = 1;
        boolean valid;
        do {
            do {
                valid = true;
                try {
                    operacija = Integer.parseInt(operacijai.nextLine());
                } catch (NumberFormatException e) {
                    System.out.println("Enter an integer only.");
                    valid = false;
                }
            } while (!valid);
            switch (operacija) {
            case 1:
                System.out.println("addingMethod()");
                n = 2;
                break;

            case 2:
                System.out.println("subtractingMethod()");
                n = 2;
                break;

            case 3:
                System.out.println("multiplyingMethod()");
                n = 2;
                break;

            case 4:
                System.out.println("dividingMethod()");
                n = 2;
                break;
            default:
                System.out.println("Invalid input");
            }
        } while (n == 1);
    }
}

A sample run:

Hello user! Which operation would you like to use?
1) + 
2) - 
3) * 
4) /
5
Invalid input

Another sample run:

Hello user! Which operation would you like to use?
1) + 
2) - 
3) * 
4) /
a
Enter an integer only.
5
Invalid input
2
subtractingMethod()

Solution 2:[2]

You can also handle the use case in default It is totally upto your use-case how you are handling the exception, you can also create your custom exception and throw from default something like:

    System.out.println("Hello user! Which operation would you like to use?");
    System.out.println("1) + \n2) - \n3) * \n4) /");


    Scanner operacijai = new Scanner(System.in);
    int operacija = operacijai.nextInt();


    int n=1;
    do {
    try {
        switch (operacija) {
        case 1:
            addingMethod();
            n=2;
            break;

        case 2:
            subtractingMethod();
            n=2;
            break;

        case 3:
            multiplyingMethod();
            n=2;
            break;

        case 4:
            dividingMethod();
            n=2;
            break;
        default:
            System.out.print("Enter a correct number!")
            throw new CustomException();
        }       
      }
      catch(CustomException e) {
          System.out.print("Enter a correct number!");
      }

    } while(n==1);
    operacijai.close();

}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Sanyam Goel