2013-07-27 6 views
-1

내 코드가 올바르게 컴파일되지 않는 이유를 알 수 없습니다. 코드가 catch 블록에 전달 될 때까지 코드를 통과 할 수 있습니다. 그것은 작동, 메시지를 표시, 그래서 그것은 오류 잡기 알아. 그러나, 그것은 동일한 장소에서 나는 그 같은 오류가 있다고 말하는 나의 프로그램을 끝낸다. 내가 뭘 잘못하고 있는지 알 수가 없어. 어떤 도움을 주셔서 감사합니다 !!Java 예외 처리

class Verification { 

String detAccess(String[] pL, String[] uL, String pass, String user) { 
    int pos = 0; 
    String access = ""; 
    try { 
     for (int i=0; !user.equals(uL[i]); i++) 
      pos++; 
    } catch (ArrayIndexOutOfBoundsException exec) { 
     System.out.println("Username doesn't exist."); 
     throw exec; 
    } 
    if(pass.equals(pL[pos])) { 
     access = "MEMBER"; 
    } else { 
     System.out.println("Incorrect password."); 
     access = "DENIED"; 
    } 

    return access;   
} 

}

+1

을 당신은 같은 오류가 rethrowing하고 있습니다. 원래의 "캐치"블록 밖에서 누가 그것을 잡을 수 있습니까? – paulsm4

답변

1

당신은 이런 식으로 코드를 다시 작성해야합니다

int pos = -1; 
... 
for (int i=0;uL.length; i++) 
{ 
    if(user.equals(uL[i])) { pos=i; break; } 
} 
... 
if(pos==-1) 
{ 
    // user not found 
} else { 
    // test the pass with pos as index 
} 
+0

아! 고맙습니다! 이 문제가 해결되어 try-catch 블록을 사용할 필요조차 없었습니다. 다시 한 번 감사드립니다! :) – Hotsaucejalapeno

7

당신은 예외 rethrowing된다 - throw exec을;

+0

"pL"과 "uL"이 같은 길이 인 경우에만이 코드에서 유일한 문제는 아닙니다. – hexafraction

0

예외를 다시 던지고 있습니다. 예외 처리의 요점은 wON't입니다.

0

두 가지 문제 :

  1. 당신은 잡기 예외를 rethrowing하고; 당신이 "그것을 처리"한다면, 당신은 그것을 다시 던질 필요가 없습니다.

  2. "예외 처리"를 사용하여 프로그램을 통한 "정상적인 제어 흐름"을 관리하고 있습니다. 이것은 일반적으로 "나쁜 스타일"로 간주됩니다. 반복을 제어 할 수 없으며 다른 것을보고 "끝났다"고 판단 할 수 있습니까?

    UPDATE : 즉 NIO의 예를

0

당신이 그것을 실행할 수 있다면 제대로 컴파일 코드 입니다. 오류로 끝나는 프로그램에 관해서는, 그건 당신이 예외를 발생하고 있기 때문이다 :

throw exec; 

성공적으로 제외 잡았지만, 당신은 다시 던졌다. 다른 프로그램이이 프로그램을 찾지 못하면 프로그램이 오류로 종료됩니다.

1

예외를 다시 제기하고 있습니다.

또 다른 한가지 :

if(pass.equals(pL[pos])) { 
    access = "MEMBER"; 

가 존재하지 않는 인덱스와 암호 목록을 확인하려고합니다으로 당신이 그것을 다시 발생하지 않은 경우에도 예외가 다시 올하게됩니다.