HashTable失败测试中的Remove()方法

时间:2016-10-24 16:51:14

标签: java hashtable

我一直在编写HashTable作为作业,我已经接受了测试来运行和通过。 截至目前,我已经将所有测试从3分开。但据我自己的测试可以看出,所有方法都可以正常工作。除了我remove()方法的例外情况。

public void remove(String key) throws MapException{
    int i = this.linearProbing(key);
    if(hashTable[i].getKey() == key){    //line 76
        numberOfEntries--;
        numberOfRemovals++;
        hashTable[i] = this.DEFUNCT;
    }
    else{       
        String e = "No entry of this key found";
        throw new MapException(e);
    }
}

当我运行此测试时,我收到错误,我不确定它是什么。

//Remove a non-existent entry. Should throw an Exception
    private static boolean test4() throws MapException {
    StringHashCode sHC = new StringHashCode();
    float maxLF = (float) 0.5;
    HashTableMap h = new HashTableMap(sHC,maxLF);
    try {
        h.insert("R3C1");
    } catch (MapException e1) {
        return false;
    }
    try {
        h.remove("R6C8");              //line 117
        return false;
    } catch (MapException e) {
        return true;        }
}

我还会在这里链接我的MapException类:

import java.lang.Exception;

public class MapException extends Exception {

    public MapException(){

    }

    public MapException(String exception){
        super(exception);
    }

    public MapException(String exception, Throwable throwable) {
        super(exception, throwable);
    }

    public MapException(Throwable throwable) {
        super(throwable);

    }

}

错误是:

  

线程“main”中的异常***测试1失败测试2成功测试3在TestHashTableMap的TestHashTableMap.test4(TestHashTableMap.java:117)的HashTableMap.remove(HashTableMap.java:73)上成功执行java.lang.NullPointerException 。主要(TestHashTableMap.java:24)

1 个答案:

答案 0 :(得分:0)

Exception in thread "main" ***Test 1 failed Test 2 succeeded Test 3 succeeded 
java.lang.NullPointerException 
    at HashTableMap.remove(HashTableMap.java:73) 
       at TestHashTableMap.test4(TestHashTableMap.java:117) 
           at TestHashTableMap.main(TestHashTableMap.java:24)

NullPointerException通常意味着您正在尝试访问一个实际上不存在的对象(或者是Null)。

使用您在问题中添加的行号是明确的 - remove()检查

hashTable[i].getKey() == key

hashtable [i]返回Null,因此getKey失败,抛出空引用错误。

尝试:

...
public void remove(String key) throws MapException{
    int i = this.linearProbing(key);

    (hash) entry = hashTable[i];

    if((entry !=null) && (entry == key)){
        numberOfEntries--;
 ...

这将在操作之前检查表中是否存在该条目。