Prince Luo
Prince Luo

Reputation: 101

Java dead code in different places

Sorry if I ask a stupid question, long time no practice with Java...... I wrote some code to simulate the Hash Table. Here is one function of my 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
}

The strange thing is, when I change the if statement if(element==null) back a little bit (anywhere but the very beginning of the structure), it will then warn me it is a 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(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
}

Anyone knows which part goes wrong?

Upvotes: 0

Views: 60

Answers (1)

Erwin Bolwidt
Erwin Bolwidt

Reputation: 31299

In your second code example, element can't possibly be null since you have already referenced it in the lines above: element.getK() in line

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

If it was null at that point, then you would have gotten a NullPointerException that you didn't catch. And that means that the method would not have continued to your if(element == null) statement.

If element is not null, then the body of your if statement won't be executed either.

Upvotes: 8

Related Questions