如何使散列table在插入空键(Java)时抛出异常?
How to make a hash table throw an exception when inserting a null key (Java)?
为了进行评估,我需要创建一个散列 table,我已经这样做了。但是,我需要在插入空键时抛出异常。
我需要通过的测试 运行 是:
@Test(expected = IllegalArgumentException.class)
public void testNullKey() {
Hashtable<Boolean> h = new Hashtable<>(10);
h.put(null, true);
}
这给了我错误:
java.lang.Exception: Unexpected exception, expected<java.lang.IllegalArgumentException> but was<java.lang.NullPointerException>
Caused by: java.lang.NullPointerException: Cannot invoke "String.hashCode()" because "key" is null
at Hashtable.hash(Hashtable.java:270)
at Hashtable.put(Hashtable.java:84)
at test.TestHT.testNullKey(TestHT.java:52)
Hashtable.hash(Hashtable.java:270) 是:
private int hash(String key)
{
int hashVal = key.hashCode();
hashVal %= max;
if (hashVal < 0)
hashVal += max;
return hashVal;
}
和Hashtable.put(Hashtable.java:84)是:
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++;
}
}
插入空键时抛出异常,我完全不知所措。我试过在 put
中添加 throw new IllegalArgumentException();
和其他类似的尝试,但我无法让它工作。
有没有人有任何想法或指示?
好的。所以这个 Hashtable
class 是你的代码,而不是 java.util.Hashtable
。 (你在那里骗了我一分钟......)
解决方法很简单。显式测试 key
以查看它是否为 null
并抛出所需的异常:
if (key == null) {
throw new IllegalArgumentException("key is null");
}
我会让你找出放置此代码的最佳位置。
另一种方法是使 NullPointerException
成为预期的异常......但我对你的问题的解读是,该测试用例正在检查 要求 是否得到满足.
为了进行评估,我需要创建一个散列 table,我已经这样做了。但是,我需要在插入空键时抛出异常。
我需要通过的测试 运行 是:
@Test(expected = IllegalArgumentException.class)
public void testNullKey() {
Hashtable<Boolean> h = new Hashtable<>(10);
h.put(null, true);
}
这给了我错误:
java.lang.Exception: Unexpected exception, expected<java.lang.IllegalArgumentException> but was<java.lang.NullPointerException>
Caused by: java.lang.NullPointerException: Cannot invoke "String.hashCode()" because "key" is null
at Hashtable.hash(Hashtable.java:270)
at Hashtable.put(Hashtable.java:84)
at test.TestHT.testNullKey(TestHT.java:52)
Hashtable.hash(Hashtable.java:270) 是:
private int hash(String key)
{
int hashVal = key.hashCode();
hashVal %= max;
if (hashVal < 0)
hashVal += max;
return hashVal;
}
和Hashtable.put(Hashtable.java:84)是:
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++;
}
}
插入空键时抛出异常,我完全不知所措。我试过在 put
中添加 throw new IllegalArgumentException();
和其他类似的尝试,但我无法让它工作。
有没有人有任何想法或指示?
好的。所以这个 Hashtable
class 是你的代码,而不是 java.util.Hashtable
。 (你在那里骗了我一分钟......)
解决方法很简单。显式测试 key
以查看它是否为 null
并抛出所需的异常:
if (key == null) {
throw new IllegalArgumentException("key is null");
}
我会让你找出放置此代码的最佳位置。
另一种方法是使 NullPointerException
成为预期的异常......但我对你的问题的解读是,该测试用例正在检查 要求 是否得到满足.