第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

哈希表算術(shù)異常

哈希表算術(shù)異常

蕪湖不蕪 2021-12-30 17:41:32
我目前正在編寫一個哈希表,但是當(dāng)我測試它時。它給了我錯誤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;    }返回導(dǎo)致了問題。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;         } 
查看完整描述

2 回答

?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗 獲得超10個贊

你x % maxSize在很多地方計算,當(dāng)maxSize是 時0,這會導(dǎo)致ArithmeticException。


初始化maxSize為正值。


請注意以下幾點:


public DSAHashTable()

{

    this.maxSize = maxSize;

    ...

}

相當(dāng)于


public DSAHashTable()

{

    this.maxSize = this.maxSize;

    ...

}

這是沒有意義的。


要么接受 的初始值maxSize作為構(gòu)造函數(shù)參數(shù):


public DSAHashTable(int maxSize)

{

    if (maxSize <= 0)

        throw new IllegalArgumentException("Illegal max size: " + maxSize);

    this.maxSize = maxSize;

    ...

}

或?qū)⑵涑跏蓟癁槟硞€默認(rèn)的正值:


static final int DEFAULT_MAX_SIZE = 10;


public DSAHashTable()

{

    this.maxSize = DEFAULT_MAX_SIZE;

    ...

}


查看完整回答
反對 回復(fù) 2021-12-30
?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗 獲得超9個贊

似乎錯誤出在構(gòu)造函數(shù)中。您正在使用 ... 本身初始化字段 maxSize。

您應(yīng)該為構(gòu)造函數(shù)提供一個 int 參數(shù),以便您可以將一個非零值傳遞給 maxSize 字段。


查看完整回答
反對 回復(fù) 2021-12-30
  • 2 回答
  • 0 關(guān)注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號