2016-08-15 409 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。该程序适当编译。 –