2016-08-15 72 views
3

我在練習在JAVA中使用HashMap的教程。 樣本HashMap的實現代碼失敗,出現錯誤編譯:找不到符號--HashMap .replace()方法

DictionaryPractice.java:57: error: cannot find symbol 
           shoppingList.replace("Bread", Boolean.FALSE); 
symbol: method replace(String,Boolean) 
location: variable shoppingList of type Map<String,Boolean> 

下面是代碼:

import java.util.HashMap; 
import java.util.Map; 

public class DictionaryPractice { 
    public static void main(String[] args) { 
     Map<String, Boolean> shoppingList = new HashMap<String, Boolean>(); 

     // Put some stuff in dictionary 
     shoppingList.put("Ham", true); 
     shoppingList.put("Bread", Boolean.TRUE); 
     shoppingList.put("Oreos", Boolean.TRUE); 
     shoppingList.put("Eggs", Boolean.FALSE); 
     shoppingList.put("Sugar", false); 

     // Retrieve items 
     System.out.println(shoppingList.get("Ham")); 
     System.out.println(shoppingList.get("Oreos")); 

     // Remove things 
     shoppingList.remove("Eggs"); 

     // Replace values for a certain key 
     shoppingList.replace("Bread", Boolean.FALSE); 
    } 
} 

我已經閱讀HashMap類JavaDoc中,並證實.replace是一個有效的HashMap方法來替換指定鍵的值。但是,我不斷收到cannot find symbol error。您的善意幫助將不勝感激。對於基本問題抱歉。
我正在使用jEdit文本編輯器,並在MacOSX Yosemite上安裝了Compile插件。

+2

您可以簡單地覆蓋該值,因爲哈希映射將覆蓋現有密鑰的值** shoppingList.put(「Bread」,Boolean.FALSE); **將完成這項工作。另一個建議是不要混合類型使用Boolean.FALSE或者只是false – whyn0t

+0

@ whyn0t我認爲本教程同時使用'布爾'和'布爾'來演示自動裝箱。存儲的值完全相同。 – RealSkeptic

+0

@RealSkeptic我沒有說這是錯的,它只是良好的編程練習 – whyn0t

回答

4

Map接口的方法replace(K,V)是Java 8

引入了新的方法很顯然,你是編譯代碼與Java 7或更早版本。

兩個可能的解決方案是:

  1. Download a Java 8 JDK for Mac OS X,並用它來編譯代碼。
  2. put代替replace。該方法replace是被放置在地圖上,如果該鍵不具有一定的價值事先使用,當你不希望新的值的便捷方法,類似於:

    if (shoppingList.contains("Bread")) { 
        shoppingList.put("Bread",Boolean.FALSE); 
    } 
    

    在你的情況,因爲你put東西Bread更早幾行,replace將是多餘的 - 你知道Bread那裏。所以請直接使用put

+0

非常感謝。按照給出的指示解決了問題。我下載並安裝了用於Mac的Java 8 JDK。該程序適當編譯。 –