2011-09-14 5 views
2

요구 사항 : 예외가있는 경우, 확인을 데이터Java의 catch 블록에서 메소드를 어떻게 호출합니까?

를 다시 메소드를 호출

내 구현 :

private void one() { 
    try { 
     //Valid data 
    }catch(Exception e) { 
    two(); 
    } 
} 

private void two() { 
    //Process data with another input 
    //On entry, 
    one(); 
} 

내 사용이 잘못되었다고 알고 있습니다. 어떻게 처리해야합니까? 당신이이 유효 때까지 수정 유효 킵은 아니지만 방법 one(), 에서 데이터를 사용하고 one()에게주고보다 전에, 다른 곳 while 루프에서 확인 데이터 될 일을

+2

왜 이것이 "부정확"하다고 생각하십니까? – Oded

+1

이것은 "두 번째 시도"가되는 catch 절의 경우가 아니기를 바랍니다. 달성하고자하는 것이 무엇인지 설명해 주시겠습니까? –

+0

내가 잘못 생각하는 이유는 : if (오류) System.exit (0); ** catch 블록에 조건이 하나 더 있습니다. catch 블록에서 one()을 호출하면 , 이전 오류 값은 계속 존재합니다. 따라서 응용 프로그램을 종료합니다 – dkulkarni

답변

5

정확하게 재귀를 사용하여 제안 할 수 있습니다. 문제가 뭔지 모르겠다. 개인적으로 루프를 사용하는 것은 대개 재귀를 사용하는 것보다 간단합니다. 나는 모든 Exception을 잡을 수는 없을 것이다. 다른 예외를 다르게 처리하려고 할 수 있습니다. 당신이 코드에서 보여

private void one() { 
    while(true) { 
    try { 
     //Valid data 
     break; 
    }catch(InvalidArgumentException e) { // or what ever you expect. 
     two(); 
    } 
    } 
} 

private void two() { 
    //Process data with another input 
    //On entry, 
} 

또는

private void one() { 
    while(true) { 
    try { 
     //Valid data 
     break; 
    } catch(InvalidArgumentException e) { // or what ever you expect. 
     // Process data with another input 
     // On entry, 
    } 
    } 
} 
+2

+1 나는 비슷한 대답을 줄 예정 였어 :) –

+0

고마워. 나는 그 사용법이 옳았다는 것을 몰랐다. 나는 다른 조건을 잘 처리하지 못했습니다. – dkulkarni

1

더 나은 방법입니다. 운이 질문에 귀하의 의견 후

는 클래스 레벨을하고이 같은 방법 two()에서 재설정하기 위해 error 변수를 확인

private void two() { 
    this.error = false; 
    //Process data with another input 
    //On entry, 
    one(); 
} 

좋은!

+0

'one()'이 데이터를 조작 할 수 있기 때문에 '알기'가 불가능할 수도 있습니다. – amit

+0

"확인 첫 번째"와 "충돌 시도"를 비교합니다. 나는 당신이 무효 입력이 얼마나 빈번하다고 생각 하느냐에 달려 있다고 생각합니다. 검증에는 불필요한 것으로 드러났습니다. – Thilo

+0

@SkeetOverFlow - 예,이 방법은 오류를 처리하는보다 최적의 방법입니다.감사합니다 – dkulkarni

0

사용은 정확 -이 정확하지 무엇이라고 생각하게?

  1. 는 예외를 던지는에 계속 경우

    , 그것은 스택 오버플로 이어질 것 -

    그러나, 나는 당신이 내가 의견이있는 캐치 원래 방법을 리콜하는 것을 알 수있다.

  2. 시간이나 통화 중 조건 자체가 변경되지 않는 한 점검/다른 논리를 확인하고 싶습니다.
  3. 루프에 걸린 경우를 대비하여 종료 조건을 고려해야합니다.
+0

감사. 나는 이제 내가 잘못한 곳을 본다. – dkulkarni

관련 문제