Java 用于测试哈希表的函数显然没有任何原因而失败
这是一个分配,用于创建哈希表和与之交互的各种方法,还提供了一个类来测试它,在创建所述哈希表和方法,然后运行测试类之后,出现了一个无法解释的问题。其中一个测试是使用实现的方法输入字符串并找到它们Java 用于测试哈希表的函数显然没有任何原因而失败,java,hashtable,Java,Hashtable,这是一个分配,用于创建哈希表和与之交互的各种方法,还提供了一个类来测试它,在创建所述哈希表和方法,然后运行测试类之后,出现了一个无法解释的问题。其中一个测试是使用实现的方法输入字符串并找到它们 Integer temp = new Integer(0); for (int k = 0; k < 200; ++k) { // this function creates 200 unique strings and s = (new Integer(k)).toStr
Integer temp = new Integer(0);
for (int k = 0; k < 200; ++k) { // this function creates 200 unique strings and
s = (new Integer(k)).toString(); // inserts them into the hash table
h.insert("R"+s+"C"+s);
}
boolean fail = false;
for (int k = 0; k < 200; ++k) { // this function tries to find each string that
s = (new Integer(k)).toString(); // was inserted into the hash table
if (!h.find("R"+s+"C"+s) ) {
fail = true;
}
}
这是用于查找插入字符串的find方法,它适用于除给定函数之外的所有其他情况。它到达if语句并跳转到findDoubleHash方法。
调试显示,哈希表中的字符串和要查找的字符串这两个值实际上是相同的,应该返回true。然而,情况并非如此,原因尚未找到解决办法
正如我所说的,测试表明这个函数是唯一存在问题的实例,任何输入或帮助都将非常感谢,因为这是为什么
谢谢你新的Integerk.toString;可以写入Integer.toString。它看起来更好,并且避免了分配。这里的==是正确的比较运算符吗?尝试.equals方法。将==更改为.equals会使函数给出NullPointerException,但允许它在任何其他实例中正常工作。这意味着什么?编辑:在整个find和findDoubleHash方法中替换这些已修复我们的问题!:你有比特币地址吗?我们想提示您。在调用前检查对象是否为null。equals可避免NullPointerException。为什么不使用哈希表的标准实现HashSet?
public boolean find(String key) {
String stringKey = key;
int hashToFind;
StringHashCode sH = new StringHashCode(arraySize);
hashToFind = sH.giveCode(stringKey);
if ( HashTable[hashToFind] == stringKey) { // this is where the method checks whether
// or not the place in the hash table matches
// the string we're trying to find
System.out.println(stringKey + " was found in index " + hashToFind);
return true;
} else {
return findDoubleHash(hashToFind, key);
}
}