Cory
Cory

Reputation: 35

Java exception handling

so I'm kind of new to catching errors and such. Anyways, the program is supposed to ask the user for 2 integers and then add them together. Simple, but if either of the numbers are not integers, than an error is thrown. Currently, if I enter 2 integers, instead of adding them, it just restarts the getAnswer() method and outputs them again. Also, if you enter more than one error, it will simply exit.

package javaapplication1;

import java.util.InputMismatchException;
import java.util.Scanner;


public class JavaApplication1 {

  public static void main(String[] args) {
    Intro();
    System.out.println("Your answer: "+getAnswer());
  }
  private static void Intro() {
    System.out.println("Hello this program adds 2 integers together and catches errors.");
    getAnswer();
  }
  private static int getAnswer() throws InputMismatchException {
    Scanner scanner = new Scanner(System.in);
    try {
      System.out.println("Please input a number");
      int num1 = scanner.nextInt();
      System.out.println("Please input a second number");
      int num2 = scanner.nextInt();
      return num1+ num2;
    } catch (InputMismatchException exp) {
      System.out.println("Exception thrown");
      return 0;
    }
  }
}

Upvotes: 0

Views: 55

Answers (1)

Vasu
Vasu

Reputation: 22452

You are calling getAnswer(); totally two times, so you just remove the call from Intro() method which will solve the problem.

private static void Intro() {
        System.out.println("Hello this program adds 2 
             integers together and catches errors.");
}

If you want to prompt the user to reenter the input again, you can call the getAnswer() in the catch block as shown below:

private static int getAnswer() {
        Scanner scanner = new Scanner(System.in);
        try {
        System.out.println("Please input a number");
        int num1 = scanner.nextInt();
        System.out.println("Please input a second number");
        int num2 = scanner.nextInt();
       return num1+ num2;
         } catch (InputMismatchException exp) {
           System.out.println("Exception thrown, please reenter values:");
           getAnswer();
        }
       return 0;
 }

One more point is that rather than catching the InputMismatchException, the other better way is read the inputs as strings and validate that they contain only numeric values like below:

private static int getAnswer() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please input a number");
        String num1 = scanner.nextLine();
        System.out.println("Please input a second number");
        String num2 = scanner.nextLine();
        if(num1.matches("[0-9]+") && num2.matches("[0-9]+")) {
            return Integer.parseInt(num1)+ Integer.parseInt(num2);
        } else {
            System.out.println(" Your inputs contain Invalid characters");
            getAnswer();
        }
       return 0;
    }

Upvotes: 3

Related Questions