我无法弄清楚我的代码出了什么问题,但是在以下[null,null,null,PS]中删除了PS失败了
/**
* Removes the specified string from this hash table
* (if the string is in this table).
*/
public void delete(String s) {
// TODO
int k = 0;
for (int i=0;i<M;i++) {
if (keys[i] != null) {
if (keys[i] == s) {
k = i;
}
}
}
keys[k] = null;
for (int i=k;i<M;i++) {
if (keys[i+1]!=null) {
keys[i] = keys[i+1];
}
}
N--;
// halves size of array if it's 12.5% full or less
if (N > 0 && N <= M/8) resize(M/2);
}
答案 0 :(得分:2)
您没有指定错误是什么,但查看代码我看到了这些问题:
String
之间的比较应使用equals
而不是==
进行,否则您不会比较字符串的值,而是比较其参考keys
大小为M
,那么keys[i+1]
将导致第二个for
循环的最后一个循环中的越界异常