在java中实现哈希表时出现NullPointerException错误

0 java hashmap

我正在通过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)

kai*_*kai 6

您正在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]您可以使用它的方法.