2017-02-08 1 views
0

죄송합니다. 바보 같은 질문을하면 Java로 연습 할 필요가 없습니다. 해시 테이블을 시뮬레이트하는 코드를 작성했습니다. 여기 내 코드의 한 기능입니다 :다른 곳에서 Java dead code

protected int find(K key){ 
    int avail=-1; 
    int i=hashValue(key); 
    int j=i; 
    do{ 
     Entry<K, V> element = bucket[i]; 

     if(element==null){ 
      if(avail<0){ 
       avail=i; 
      } 
      break; 
     } 

     if(key.equals(element.getK())){ 
      return i; // found 
     } 

     if(element==this.used){ 
      if(avail<0){ 
       avail=i; 
      } 
     } 
     i=(i+1)%capa; 
    }while(i!=j); 
    return -(avail+1); // return a hash address 
} 

이상한 것은,이다 나는 다시 if 문 경우 (요소 == NULL) (어디 있지만, 구조의 시작)을 조금 변경하면, 그것을 그런 다음 코드가 죽었다고 경고합니다.

protected int find(K key){ 
    int avail=-1; 
    int i=hashValue(key); 
    int j=i; 
    do{ 
     Entry<K, V> element = bucket[i]; 

     if(key.equals(element.getK())){ 
      return i; // found 
     } 

     if(element==this.used){ 
      if(avail<0){ 
       avail=i; 
      } 
     } 

     // dead code then 
     if(element==null){ 
      if(avail<0){ 
       avail=i; 
      } 
      break; 
     } 
     //dead code then 

     i=(i+1)%capa; 
    }while(i!=j); 
    return -(avail+1); // return a hash address 
} 

누구에게 잘못 되었나요? 이미 위의 라인을 언급 한 이후 두 번째 코드 예제에서는

+0

Erwin의 답은 spot-on이지만, 호기심에서 벗어나 데드 코드 피드백을주는 것은 무엇입니까? –

답변

8

, element 가능성이 null 될 수 없습니다 : 그것은 그 시점에서 null했다

if(key.equals(element.getK())) 

경우 라인에 element.getK(), 당신은 것 당신이 잡지 않은 NullPointerException을 얻었습니다. 그리고 그 방법은 당신의 if(element == null) 진술에 계속되지 않았 음을 의미합니다. element하지null 경우

, 당신의 if 문의 후 몸은 하나 실행되지 않습니다.

+0

감사합니다. 그것이 사실 일 것입니다. 나는 가야하고 어떤 데이터로 먼저 테스트해야한다. 알람이 발생하고 나는 알 것이다. ...... –

관련 문제