我有以下方法来获取在双哈希类中输入的键的值。它一直说它运行后有一个错误。
/* Function to get value of a key */
public int get(String key)
{
int hash1 = myhash1( key );
int hash2 = myhash2( key );
while (table[hash1] != null && !table[hash1].key.equals(key))
{
hash1 += hash2;
hash1 %= TABLE_SIZE;
}
return table[hash1].value;
}
首先我必须在哈希表中插入一个新的名称和值,如果之后我有例子:
System.out.println( "Please enter the name of the person you want to search for: " );
System.out.println( "Value= " + ht.get(scan.next()));
但如果我有:
System.out.println( "Please enter the name of the person you want to search for: " );
System.out.println( "Value= " + ht.get(scan.nextLine()));
它说这是一个错误。这意味着该方法不接受包含空格等的整行字符串,但它只接受一个字符串。 Netbeans说错误在于这一行:
return table[hash1].value;
任何人都可以帮助我吗?
答案 0 :(得分:0)
退出循环的条件之一是
while (table[hash1] != null
这意味着您知道table [hash1]可能是null
,但您可以
return table[hash1].value;
你得到一个NullPointerException。使用调试器时这很明显。
我建议你在尝试使用它之前检查表[hash1],如
return table[hash1] == null ? null : table[hash1].value;
编写此方法的更好方法是
// don't go around forever if the hash2 is poor.
for(int i = 0; i < TABLE_SIZE; i++) {
Entry e = table[hash1];
if (e == null) return null;
if (e.key.equals(key)) return e.value;
hash1 += hash2;
hash1 %= TABLE_SIZE;
}
// should never happen if hash2 is well chosen.
return null;