我正在通过java实现哈希表.当我实现下面的代码时,我得到一个NullPointer Exception错误,但是如果我在类HashTable中使用语句kv [key] = new KeyValue(key,value)替换void put(int key,int value)中的else语句; 有用!有人能解释为什么会这样吗?请帮忙!
public class KeyValue {
int key;
int value;
KeyValue(int k, int v)
{
key = k;
value = v;
}
public int getKey(){
return key;
}
public int getValue()
{
return value;
}
public void put(int k, int v)
{
key = k;
value = v;
}
}
public class HashTable{
KeyValue[] kv;
HashTable(){
kv = new KeyValue[4];
for (int i=0; i<4 ; i++)
{ kv[i]=null;
}
}
void put(int key, int value)
{
if((kv[key]!=null) || (key<0 && key>=4))
{
;
}
else
{
kv[key].put(key,value);
}
}
int get(int key)
{
int value;
value=kv[key].getValue();
return value;
}
public static void main(String[] a){
HashTable h = new HashTable();
h.put(1,2);
System.out.println(h.get(1));
}
}
Run Code Online (Sandbox Code Playgroud)
您正在kv[key]使用null 进行初始化.所以,如果你kv[key].callSomeMethod有一个NullPointerException因为没有对象可以调用方法.
您可以使用默认构造函数初始化您KeyValues喜欢的Peter Radar或者在您HashTable的构造函数中执行此操作KeyValue.
HashTable(){
kv = new KeyValue[4];
for (int i=0; i<4 ; i++)
{
kv[i]=new KeyValue();
}
}
Run Code Online (Sandbox Code Playgroud)
现在KeyValue存储了一个类型的对象,kv[i]您可以使用它的方法.
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |