哈希表算术异常

我目前正在编写一个哈希表,但是当我测试它时。它给了我错误java.lang.ArithmeticException / by zero。这是我的代码:


   private int hash(String key)

    {

        int hashIdx = 0;

        int size = m_hashTable.length;

        for (int i = 0; i < m_hashTable.length; i++)

        {

            hashIdx += key.charAt(i);

        }

        return hashIdx % maxSize;

    }

返回导致了问题。


import java.util.*; 

public class DSAHashTable

{

    private DSAHashEntry[] m_hashTable;

    private int maxSize, size;

    //contructor

    public DSAHashTable()

    {

        this.maxSize = maxSize; 

        m_hashTable = new DSAHashEntry[maxSize];

        for (int i = 0; i < m_hashTable.length; i++)

        {

            m_hashTable[i] = null;

        }

    } 

    //Adds new element

    public void put(String key, Object value)

    {

        int tmp = hash(key);

        int i = tmp;

        do

        {

            if (m_hashTable[i] == null)

            {

                m_hashTable[i].setKey(key);

                m_hashTable[i].setValue(value);

                size++;

                return;

            }

            else if (m_hashTable[i].equals(key))

            {       

                m_hashTable[i].setValue(value);

                return;

            }

            i = (i + 1) % maxSize;

        }while (i != tmp);    

    }

    public Object get(String key)

    {

        int i = hash(key);

        while (m_hashTable[i] != null)

        {

            if (m_hashTable[i].equals(key))

            {

                return m_hashTable[i].getValue();

            }

            i = (i + 1) % maxSize;

        }

        return null;

    }

    public void remove(String key)

    {

        int i = hash(key);

        while (!key.equals(m_hashTable[i].getKey()))

        {

            i = (i + 1) % maxSize; 

        }

 


芜湖不芜
浏览 219回答 2
2回答

慕桂英546537

你x % maxSize在很多地方计算,当maxSize是 时0,这会导致ArithmeticException。初始化maxSize为正值。请注意以下几点:public DSAHashTable(){&nbsp; &nbsp; this.maxSize = maxSize;&nbsp; &nbsp; ...}相当于public DSAHashTable(){&nbsp; &nbsp; this.maxSize = this.maxSize;&nbsp; &nbsp; ...}这是没有意义的。要么接受 的初始值maxSize作为构造函数参数:public DSAHashTable(int maxSize){&nbsp; &nbsp; if (maxSize <= 0)&nbsp; &nbsp; &nbsp; &nbsp; throw new IllegalArgumentException("Illegal max size: " + maxSize);&nbsp; &nbsp; this.maxSize = maxSize;&nbsp; &nbsp; ...}或将其初始化为某个默认的正值:static final int DEFAULT_MAX_SIZE = 10;public DSAHashTable(){&nbsp; &nbsp; this.maxSize = DEFAULT_MAX_SIZE;&nbsp; &nbsp; ...}

当年话下

似乎错误出在构造函数中。您正在使用 ... 本身初始化字段 maxSize。您应该为构造函数提供一个 int 参数,以便您可以将一个非零值传递给 maxSize 字段。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java