簡體   English   中英

使用數組java的字典

[英]dictionary using array java

我的目標是使用數組實現字典,但我遇到了一些問題。我認為放置和獲取的方法不足以發揮作用,但我不知道要修改什么。這是Dictionary類:

public class Dictionary implements IDictionary{
public class ObjectDictionary{
    //public boolean isFull=false;
    public Object key;
    public Object value;

}
private ObjectDictionary[] elems; 
private int nrElem;
public Dictionary(){
    nrElem=0;
    elems=new ObjectDictionary[20];
}
public void resize(){
    ObjectDictionary[] ob = new ObjectDictionary[2*elems.length];
    for(int i=0;i<elems.length;i++)
        ob[i]=elems[i];
    elems=ob;
}
public int size(){
     return nrElem;
 }
public boolean isEmpty(){
    return nrElem==0;
}
public void put(Object k,Object v){
    for (int i=0; i<elems.length;i++){  
        if (elems.length == nrElem){
            resize();
        elems[i].key=k;
        elems[i].value=v;
        //elems[i].isFull=true;

        }
    }
}

public Object get(Object k){
    for(int i=0; i<elems.length;i++)
        if(elems[i].key.equals(k)){
            return elems[i].value;     
        }
    return null;
}
}

這是主要方法:

public class Start {
public static void main(String[] args){
IDictionary d = new Dictionary();
    d.put("a",1);
    d.put("b", 2);
    for(int i=0;i<d.size();i++){
    System.out.println(d.get("a"));
}
}
}

當我編譯時,它只表示已終止,我不知道如何解決它。 非常感謝你。

put新元素時尚未增加nrElem 因此size為零。

我假設put method將在數組的末尾添加一個元素。

在您的put方法中,您使用了一個循環來檢查elems.length == nrElem,因為nrElem以0開頭,elems.length為20,該條件將永遠無法滿足,因此不會將任何鍵值對添加到數組。 換句話說,if塊中的語句將永遠不會執行。

if (elems.length == nrElem){
        resize();
    elems[i].key=k;
    elems[i].value=v;
    //elems[i].isFull=true;
}

如果要實現這一點,我將首先檢查數組中是否有足夠的空間來容納另一個元素。 如果不是,請執行resize()。 然后只需將元素添加到數組的末尾即可。 同樣不要忘記更新nrElem。

public void put(Object k, Object v) {
    if (nrElem == elems.length) {
        resize();
    }
    elems[nrElem] = new ObjectDictionary();
    elems[nrElem].key = k;
    elems[nrElem].value = v;
    ++nrElem;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM