2012-04-03 40 views
0

我試圖運行代碼我得到「UnsuportedOperationException」時設立地方使用的數據結構將確定一個字符串中的參數::多個構造與相同參數

DictionaryI<IPAddress,String> ipD; //declaring main structure using interface 

// Constructor, the type of dictionary to use (hash, linkedlist, array) 
// and the initial size of the supporting dictionary 
    public IPManager(String dictionaryType, int initialSize){ 
     if(st1.equals(dictionaryType)) 
      ipD = new LinkedListDictionary(); 
     if(st2.equals(dictionaryType)) 
      ipD = new HashDictionary(initialSize); 
     if(st3.equals(dictionaryType)) 
      ipD = new ArrayDictionary(initialSize); 
     else 
      throw new UnsupportedOperationException(); 
    } 

構造不管我輸入什麼東西。任何幫助或正確的方向點將不勝感激! (代碼是Java)

+0

小心給我們st1,st2和st3? – 2012-04-03 03:14:25

+0

st1 =「linkedlist」 st2 =「hash」 st3 =「array」 – JeffS 2012-04-03 17:01:26

回答

6

答案顯然是

public IPManager(String dictionaryType, int initialSize){ 
    if(st1.equals(dictionaryType)) 
     ipD = new LinkedListDictionary(); 
    else if(st2.equals(dictionaryType)) 
     ipD = new HashDictionary(initialSize); 
    else if(st3.equals(dictionaryType)) 
     ipD = new ArrayDictionary(initialSize); 
    else 
     throw new UnsupportedOperationException(); 
} 

對於st1st2您的代碼將始終陷入throw

也就是說,這種方法通常是不好的。參考Java收集接口(例如Map<K,V>)及其實現(HashMap,TreeMap等)。

+1

看看您的原始文章 - 您遺漏了'else'關鍵字。 – 2012-04-03 03:26:49

+0

如果你想堅持這種方法,至少考慮切換到字典類型的枚舉而不是硬編碼字符串 – Robin 2012-04-03 05:43:01

+0

奇怪的是,我最初嘗試了它與其他如果,它沒有工作,雖然它現在工作因爲我問過你們(奇怪的是,在這裏以及在IT服務檯工作的情況如何,儘管我的probalby也在我之前的代碼中做了錯誤處理)。 這是一個學校項目,所以不允許使用Java集合,並且必須自己編寫數據結構。 感謝您的幫助! – JeffS 2012-04-03 16:56:23