2014-12-07 68 views
-2

我寫了一個HashMap,其中的鍵爲String,值爲String的LinkedList。查找並替換HashMap中的值?

我想寫一個方法,消耗鍵是一個字符串和值。然後我想在HashMap中找到與給定鍵相匹配的鍵,然後將給定的String添加到字符串列表中。

**謝謝你,但還有一個錯誤。 在這一行「Likes.put(s,Likes.get(s).add(fav));。」它說:

Error: no suitable method found for put(java.lang.String,boolean) 
    method java.util.HashMap.put(java.lang.String,java.util.LinkedList<java.lang.String>) is not applicable 
     (actual argument boolean cannot be converted to java.util.LinkedList<java.lang.String> by method invocation conversion) 
    method java.util.AbstractMap.put(java.lang.String,java.util.LinkedList<java.lang.String>) is not applicable 
     (actual argument boolean cannot be converted to java.util.LinkedList<java.lang.String> by method invocation conversion) 

我不能說爲什麼它說「實際參數是布爾」!我想插入一個LinkedList沒有一個布爾

class Recomnder { 

    Recomnder(){ 
    Likes.put("tom",new LinkedList()); 
    Recomnder.addLikes("tom","movie tovi"); 
    } 

    HashMap<String,LinkedList<String>> Likes = new HashMap<String,LinkedList<String>>(); 


void addLikes (String name, String fav){ 
    for (String s : Likes.keySet()) { 
     if (s.equals(name)) 
     Likes.put(s,Likes.get(s).add(fav)); 
     } 
    } 
    } 
+0

編譯器消息非常清晰,你應該可以自己調試它。 – Dici 2014-12-07 23:13:53

+0

您應該使用static void ...方法addLikes()... – MJSt 2014-12-07 23:16:59

回答

0

除了將您的方法更改爲靜態。更改以下語句。

之前
Likes.put(s,Likes.get(s).add(fav));


Likes.get(s).add(fav);;

在上面的代碼中,Likes.get(s).add(fav)返回布爾值,這個返回值被添加到Map中。因此編譯器給出錯誤。

只要將字符串添加到Likes.get(s)中,就可以做到這一點,因爲java在引用上工作。這將按預期工作。

1

問題是,在此聲明:

Recomnder.addLikes("tom","movie tovi"); 

你是在告訴你要訪問addLikes作爲一個靜態方法編譯器的方式。但是它沒有被定義爲靜態方法。您只能對Recomnder的實例調用addLikes。所以,如果你改變它:

addLikes("tom","movie tovi"); 

它應該工作。
btw。嘗試遵守Java命名約定。習慣始終用小寫字母開頭實例變量名稱(例如喜歡而不喜歡)。這樣你更容易發現這樣的錯誤。

1

實例方法需要從實例中調用。你的addLikes方法是一個實例方法(它沒有靜態修飾符)。您需要先創建該類的實例,然後才能調用該方法。