2011-12-08 3 views
0

예외를 처리 할 예정인 자바 프로그램이 있습니다. 그러나 최종 결과는 의도 한 바가 아닙니다. 여기에 내 프로그램의 전반적인 아이디어가 있습니다. 그것은 0의 입력을 받아들이고 프로그램을 종료한다고 가정합니다. 입력 대화 상자에서 예외가 발생하여 "잘못된 번호"라는 메시지가 인쇄됩니다.Java 시도하고 잡습니다

내 머리가 catch 블록에 한 줄의 코드가 누락되었다고 말하고 있습니다.

여기에 내 코드 : if 문 당신은 여기에서 예외를 캐치하지 않는

import javax.swing.JOptionPane; 


public class exceptTest { 

    public static void main(String[] args){ 
     try { 
      String line = JOptionPane.showInputDialog(null, "enter number"); 
     if(line.equals ("0")); 
     System.exit(0); 
     }catch(Exception e){ 

      JOptionPane.showMessageDialog(null, "bad number"); 
     } 
    } 
} 

답변

1

, 당신은 단순히을하고 있습니다, 당신은 단지/다른 경우를 사용할 수 있습니다.

try{ 
    String line = JOptionPane.showInputDialog(null, "enter number"); 
    if(line.equals ("0")){ 
      System.exit(0); 
    }else{ 
     JOptionPane.showMessageDialog(null, "bad number"); 
    } 
}catch (Exception ex){ 
    ex.printStackTrace(); 
} 

만 showInputDialog()가 발생 어떤 예외를 사용하지만, 당신은 아무것도 잡기되지 않습니다 확인 전화 번호에 대한 것입니다 캐치, 그것은 단지 당신은 세미콜론 후이 0

+0

안녕하세요 BVSmallman, 나는 그렇게 할 수 있었고 훨씬 쉬워졌습니다. 그러나 내 프로그램의 아이디어는 시도와 예외를 잡아서 더 어렵게 만드는 것입니다. 답장을 보내 주셔서 감사합니다! –

+0

if 문 다음에 문제가 발생할 세미콜론이 여전히 있습니다. –

+0

당신의 목표가 예외를 잡는 것이라면, 0이 아닐 때 수동으로 던져야하지만, 아무런 숫자를 입력하지 않아도 아무 것도 던지지 않고 잡을 수 있습니다. – BVSmallman

0

아니다 if 문은 라인을 종료하고 컴파일러는 나머지 if를 찾지 않습니다. 세미콜론을 제거하면 정상적으로 작동합니다. 입력이 때문에 동일하지에 0 인 경우

import javax.swing.JOptionPane; 

public class exceptTest 
{ 

    public static void main(String[] args){ 
     try 
     { 
      String line = JOptionPane.showInputDialog(null, "enter number"); 
      if(line.equals ("0")) //semi-colon removed here 
      { 
       System.exit(0); 
      } 
      throw new IllegalArgumentException("Input was not 0"); 
     } 
     catch(Exception e) 
     { 
      JOptionPane.showMessageDialog(null, "bad number"); 
     } 
    } 
} 
+0

당신은 절대적으로 정확한 세미콜론을 없애고 있지만 문제 만 해결할 수는 없습니다 (@ BVSmallman의 대답 참조). – Mac

+0

이런 종류의 '작동'하지만 OP의 목표에 맞지 않을 것이라고 생각합니다. –

+0

@Mac 나는 위의 내용을 보았지만, else 블록을 사용하더라도 여전히 세미콜론 때문에 접근 할 수 없다. –

0

코드는 따라서 더 ErrorMessage가 화면에 표시되지 않습니다, 당신은 아무것도 잡지 못할, 예외를 throw하지 않습니다.
를 다음 (오류 메시지를 표시하여 ifelse를 사용을 - - 입력이 0이 아닌 경우
또는
이 (다음 캐치를 입력합니다) 예외를 던질 :

당신은 두 가지 일을 할 수있는

편집 : 물론 Hunter McMillen이 알아 차린 것처럼 if 문 다음에 세미콜론을 제거해야합니다.

+0

오, 내가 잘못 한 것을보고 추가해야했습니다. 동료 프로그래머 들께 감사드립니다! –

1

절대로 예외를 throw하지 않으므로 예외 처리 코드를 실행하지 마십시오. 코드는 입력을 실행 한 다음 입력이 "0"과 같은지 테스트 한 다음 해당 결과에 따라 또는 대화 상자를 표시하지 않고 실행합니다.

예외를 throw하는 것은 코드가 처리 할 조건 밖에서 발생했거나 명시 적으로 throw하기 때문에 발생합니다.

"조건 외"등으로, 나는 0으로 나누는 것과 같은 것을 의미합니다. Java (다른 언어도 아님)를 처리하고 예외가 발생합니다. 프로 시저 처리의 일반 단계가 중지되고 실행 처리기가 호출됩니다.

귀하의 경우 (예를 들어) 입력을 숫자로 분석하려고 시도했지만 입력이 숫자가 아닌 경우 예외가 발생합니다. 이것은 당신이 원했던 것과는 다른 기능이지만 예외가 무엇인지에 대한 더 나은 그림입니다. 뭔가 같은 것

try 
{ 
int numberEntered = Integer.parse(line); 
JOptionPane.showMessageDialog(null, "Entered a number, parsed to " + numberEntered); 
} 
catch (NumberFormatException nfe) 
{ 
JOptionPane.showMessageDialog(null, "Did not enter a number, but <" + line + ">"); 
} 

일종의 예외가 일반적으로 좋은 것을 보여줍니다.

원하는 경우 예외를 정의하고 BadNumberException을 호출하여 코드에 던져 넣을 수 있습니다. if 문에 else 절을 ​​넣으면됩니다.하지만 당신의 일과는 예외를 던질 것이고, 예외를 던져서 잡는 일은 예외적이라고 생각합니다.

희망이 있습니다. rc

관련 문제