2017-02-08 2 views
0

Извините, если я задаю глупый вопрос, давно не практикуюсь с Java ...... Я написал код для имитации таблицы хэшей. Вот одна функция моего кода:Java мертвый код в разных местах

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 
} 

Странная вещь, когда я изменить, если заявление, если (элемент == 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

Ответ Эрвина на месте, но только из любопытства, что дает вам обратную связь с мертвым кодом? –

ответ

8

В вашем втором примере кода element не может быть null, так как вы уже ссылаются его в строках выше: element.getK() в строке

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

Если бы это было null в этот момент, то вы бы получил NullPointerException, которого вы не поймали. И это означает, что этот метод не будет продолжаться до вашего if(element == null).

Если element является неnull, то тело вашего if заявление не будет выполняться либо.

+0

Спасибо, миллион. Это должно быть так. Сначала мне нужно сначала проверить некоторые данные, которые тревожат, и я узнаю ... –

Смежные вопросы