2016-10-23 2 views
-1

현재 해시 테이블에 대해이 방법을 사용하고 있으며 현재로서는 그렇게 보입니다. 난 그게 해시 테이블에서 실제 항목을 삭제 작동 던져 새로운 MapException을 제거 할 때throw 예외가 없으면 키가 삭제되지만 예외는 없습니다.

public void remove(String key) throws MapException { 
    // TODO Auto-generated method stub 
     for(int i = 0; i <List.length;i++){ 
      if(List[i] !=null && List[i].equals(key)){ 
      List[i] = null; 
      numberOfElements--; 
     }else{ 
      throw new MapException("Nothing here", null); 
     } 
    } 

} 

내 질문이지만,이 때 예외를 throw하지만 실제 항목을 삭제하지 않는 이유는 무엇입니까?

+0

코드를 단계별로 실행하십시오. 'i = 0'이면 어떻게 될까요? 'if'는 사실입니까? 나는하지 않는다. – Tunaki

+0

힌트 : 코드 서식 지정 작업 ... 다른 사람이 너무 멀리 왼쪽에 앉아 있다는 사실만으로도 코드를 이해하기가 더 어려워집니다 ... – GhostCat

답변

0

나는 List [i]가 alredy null이고 'if'블록이 실행되지 않는다고 생각합니다. 이 경우 : 예외가

  • 삭제 MapException는 아무것도 그 반복에서 실행되지 할 것입니다 발생합니다

    • 이 MapException을 유지 목록 [i]는 당신이 '생각하는지도 null 값을 다시 계속됩니다 if '블록이 실행되었습니다.

  • 0

    루프는 처음 발견 된 항목이 null이거나 해당 키와 일치하지 않는 항목을 throw합니다. 따라서 삭제하려는 원하는 키가 목록의 해당 키보다 길면 결코 도달하지 않습니다.

    다음 목록 입력을 계속하기 위해 검색된 키가 아닌지 확인하기 위해 if 문에서 논리를 변경해야합니다.

    public void remove(String key) throws Exception 
    { 
        boolean deleted = false; 
        for (int i = 0; i < list.length; i++) 
        { 
         if (List[i] == null || !List[i].equals(key)) 
         { 
          continue; 
         } 
         ist[i] = null; 
         numberOfElements--; 
         deleted = true; 
        } 
    
        if (!deleted) 
        { 
         throw new Exception("Nothing here"); 
        } 
    } 
    

    BTW1 : 당신이 키를 발견하고이를 삭제 한 경우에는 루프 후에 던져하기 위해 기억해야 할 예외 생성자의 두 번째 PARAM은 캐치에 예 (내장 예외를 제공하기위한 것입니다 catch 블록을 새로운 블록에 삽입하고자하는 블록). null을 제공하는 것은 무의미합니다.

    BTW2 : 코드를 작성할 때 어느 정도주의를 기울이면 많은 두통 상황을 예방할 수 있습니다 ("왜이게 작동하지 않는 ..."). 붙여 넣은 코드에서 몇 가지 "냄새"됩니다

    1. 가의 일반적인 사용에 따라 완벽한 포맷 (들여 쓰기)
    2. 을 순종하지 않는 코드 ("// TODO 자동 생성 방법 스텁")
    3. 삭제 명명 : 변수와 ​​메소드는 낮은 문자로 시작하고, 클래스는 대문자로 시작합니다. "List"라는 이름은 클래스 (인터페이스)의 이름으로 java에 이미 있습니다. AND : "목록"은별로 말하지 않습니다. 여기서 "키"라고하는 것이 좋습니다.

    BTW3 : 삭제할 키만 null로 설정 한 것으로 보입니다. 연관된 가치 ("지도"에 대해 이야기하고있는 것)는 무엇입니까?

    관련 문제