如何使哈希表在插入空键(Java)时引发异常?
对于评估,我需要创建一个哈希表,我已经完成了。但是,在插入null键时,我需要抛出一个异常 我需要通过的测试是:如何使哈希表在插入空键(Java)时引发异常?,java,arrays,null,hashtable,illegalargumentexception,Java,Arrays,Null,Hashtable,Illegalargumentexception,对于评估,我需要创建一个哈希表,我已经完成了。但是,在插入null键时,我需要抛出一个异常 我需要通过的测试是: @Test(expected = IllegalArgumentException.class) public void testNullKey() { Hashtable<Boolean> h = new Hashtable<>(10); h.put(null, true); } 我完全不知道在插入空密钥时引发异常。我已尝试添加抛出新的Il
@Test(expected = IllegalArgumentException.class)
public void testNullKey() {
Hashtable<Boolean> h = new Hashtable<>(10);
h.put(null, true);
}
我完全不知道在插入空密钥时引发异常。我已尝试添加抛出新的IllegalArgumentException()
和其他类似的尝试在中放置
,但我无法让它工作
有人有什么想法或建议吗?好的。所以这个
Hashtable
类是您的代码,而不是java.util.Hashtable
。(你骗了我一分钟…)
解决办法很简单。显式测试键
以查看它是否为null
,并引发所需的异常:
if (key == null) {
throw new IllegalArgumentException("key is null");
}
我会让你去找出把代码放在哪里最好
另一种方法是将
NullPointerException
设置为预期的异常。。。但是我对您问题的理解是,测试用例正在检查需求是否得到满足。当键为空时,表达式键.hashCode()
将抛出NullPointerException
,那么您为什么期望出现IllegalArgumentException
调整您的期望值,即将测试代码更改为@test(expected=NullPointerException.class)
“那么您为什么期望出现IllegalArgumentException?”。遗憾的是,我不是。这是一个我们需要通过标记的测试。然后添加一个if
语句,在代码尝试执行key.hashCode()
之前抛出一个IllegalArgumentException
。这有什么不明显的?重载名称哈希表
,即使它在您自己的包中,通常都是一个坏主意™.
private int hash(String key)
{
int hashVal = key.hashCode();
hashVal %= max;
if (hashVal < 0)
hashVal += max;
return hashVal;
}
public void put(String key, V value)
{
int h = 0;
if (getLoadFactor() > maxLoad)
resize();
h = probeType == PROBE_TYPE.LINEAR_PROBE ? hash(key) : doubleHash(key);
if (get(key) != null)
{
arr[h] = new Pair(key, value);
} else
{
arr[findEmpty(h, 0, key)] = new Pair(key, value);
itemCount++;
}
}
if (key == null) {
throw new IllegalArgumentException("key is null");
}