2012-09-02 2 views
0

이것은 코드 샘플입니다. 5 분모 : 나는 분자 입력했다면 0Why/inputMismatchException을 추가 할시기는 언제입니까?

이 같은 예외가 얻을 : 내가 포함 알고

Exception in thread "main" java.lang.ArithmeticException:/by zero 
at ExceptionHandling.DivideByZeroExceptions.quotient(DivideByZeroExceptions.java:10) 
at ExceptionHandling.DivideByZeroExceptions.main(DivideByZeroExceptions.java:22) 

을 (산술 예외를 throw) 그러나 나는 것을 어떻게 알 것 inputMismatchException을 사용해야합니까?

// Try DivideByZeroExceptions 

    public class DivideByZeroExceptions { 

public static int quotient(int numerator, int denominator) { 
    return numerator/denominator; 
} 

public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 

    System.out.println("Please enter an integer numerator: "); 
    int numerator = input.nextInt(); 
    System.out.println("Please enter an integer denominator: "); 
    int denominator = input.nextInt(); 

    int result = quotient(numerator, denominator); 
    System.out.printf("\nResult: %d/%d = %d\n", numerator, denominator, 
      result); 

} 

}

+2

이 경우 예외가 발생하지 않을 것이므로 입력을 확인하고 사용자에게 친숙한 오류 메시지와 다시 시도 할 수있는 기회를 제공합니다. 예외는 사용자에게 친숙하지 않습니다. –

+0

그래서 언제 예외를 사용해야합니까? 예외를 사용하는 것이 더 낫다는 예제를주세요. – AppSensei

+1

메서드 나 라이브러리를 호출하는 소프트웨어가 예외를 잡을 것으로 예상되면 Exception을 throw해야합니다. –

답변

2

RuntimeException 확실하지 정확히 무엇을 당신의 inputMismatchException에 대해 물어,하지만 당신이해야 할 일이다

public static int quotient(int numerator, int denominator) { 
    if(denominator == 0) 
     throw new IllegalArgumentException("Cannot divide by 0!"); 
    return numerator/denominator; 
} 

IllegalArgumentExceptionRuntimeException 아니라 Exception을 확장합니다. 따라서 스레드가 발생하면 스레드의 실행을 중지하므로 catch/throw 할 필요가 없습니다. 물론 스레드를 중지하지 못하도록 메소드 외부에서 catch 할 수도 있습니다.

+0

고마워요 .. 알렉스 – AppSensei

+0

@ RonyJohn Yup :) 올바른 것으로 표시해주세요 (당신이 원했던 것처럼 보입니다) –

1

당신은에 RuntimeExceptions에서 파생 된 예외를 선언하지 않아도 당신의 throws 절 (v.g., NullPointerException). 그래서 컴파일러가 선언해야한다고 말하지 않습니다 (다른 예외의 경우 컴파일러 오류가 발생하거나 IDE가 메서드 선언의 실수를 알립니다).

물론 호출하는 메소드 중 하나가 던져 버릴 수도있는 경우 다른 예외로 catch 할 수 있습니다.

확인

2

ArithmeticExceptionInputMismatchException은 모두 검사되지 않은 예외입니다 (하위 유형은 RuntimeException입니다). 즉, 그 (것)들을 붙잡거나 던질 것을 요구되지 않는다, 그러나, 당신은 그 (것)들을 일으키는 케이스를 취급 할 필요가있다.

예를 들어, DivideByZeroException (ArithmeticException)을 피하기 위해 프로그램은 분모가 0이 아닌지 확인해야합니다. 그렇다면 부서를하지 마십시오.

+0

흠, 재미 있습니다! 대학 교과서는 나를 혼란스럽게합니다. 그렇다면 예외를 사용할 것으로 예상되는 시나리오는 무엇입니까? – AppSensei

+0

확인 된 예외 (RuntimeException의 하위 클래스가 아닌)는 항상 catch해야합니다. 귀하의 코드 (API)는 예기치 않은 상황에서 기존 또는 맞춤 (귀하가 정의한) 예외를 던질 수 있습니다. –

관련 문제