Skip to content
Advertisement

Using exception for invalid entry

I am trying to use exceptions in my assignment to catch an error when a user input invalid entry.

I tried using the if else statement to catch but whenever running the program it will skipped pass my exception even when I input invalid entry. Do any of you have any idea where I am wrong in the code?

PS: please have mercy and go easy on me as I am still learning

private static void initArray() throws Exception {
    while(true) {
        System.out.print("nPlease enter the name: ");
        String name = scanner.nextLine();
        if(!name.contains(" ")){
            System.out.println("Please enter the coin:");
            try {
                int coinValue = scanner.nextInt();
                    if(coinValue>= 5){
                        if(coinValue % 5 != 1){
                            Change c = new Change(name, coinValue);
                            addChangeObject(c);
                        }else {
                            throw new Exception("invalid value);                            
                            }

                        }
            }catch (Exception e){
                c.setMessage(e.setMessage);
            }

Advertisement

Answer

You are throwing an exception at the appropriate condition, but then immediately catching that exception. After the catch block the execution continues to prompt for another user.

There are a few ways to solve this:

  1. You can have a continue statement in the catch block to continue with the next execution of the containing while(true) loop, but that would require the user to re-enter a name before entering another coin value.

  2. The other option is to have another while(true) loop wrapping the try-catch block prompting for coins and a break statement if the conditions are met. Something like this:

while (true) {
    System.out.println("Please enter the coin value for the person (multiple of 5):");
    int coinValue = scanner.nextInt();
    try {
        if (coinValue >= 5 && coinValue <= 1000 && coinValue % 5 == 0) {
            Change c = new Change(name, coinValue);
            addChangeObject(c);
            break;
        } else {
            throw new Exception("Value not within 5 to 1000 and not mutliples of 5");
        }
    } catch (Exception e) {
        // catch logic asking the user to re-enter a coin value
        System.out.error("Error: " + e.getMessage());
    }
}
5 People found this is helpful
Advertisement