HashMap不起作用

时间:2014-02-05 20:05:28

标签: java hashmap

当我使用“frageStellen”方法时没有任何反应 - 为什么?我希望我的计算机从HashMap“ratschlagMap”中返回答案,该答案适用于“frage”。

import java.util.HashMap;

public class Kapitän
{
   private HashMap<String, String> ratschlagMap;

public Kapitän()
{
 ratschlagMap = new HashMap<String, String>();
 antwortenGenerieren();  
}

public void antwortenGenerieren()
{
    ratschlagMap.put("hallo", "Guten Tag, mein Herr!");
    ratschlagMap.put("wetter", "Es riecht nach Sturm!");
    ratschlagMap.put("liebe", "Die Liebe ist wie die See: erst stürmisch, dann flaut sie ab...");
    ratschlagMap.put("zukunft", "Erst die Segel setzten, dann übers Ziel nachdenken!");
}

public void frageStellen (String frage)
{
    frage.toLowerCase();

    if (ratschlagMap.containsKey(frage))
    {
       ratschlagMap.get(frage);
    }
}
}

谢谢!

4 个答案:

答案 0 :(得分:2)

如果您使用的是hashmap.get,则可能需要返回此值。此外,您不需要检查map是否包含此元素 - 如果找不到值,它将返回null。看看这段代码:

public String frageStellen (String frage)
{ 
    return ratschlagMap.get(frage.toLowerCase());
}

您可能还应该阅读有关Java语言的更多信息......

答案 1 :(得分:1)

此代码存在两个问题。第一个是这一行:

 frage.toLowerCase();

此方法返回一个字符串,它不会修改字符串(因为Java中的String对象是不可变的)。您可以使用frage.toLowerCase()作为密钥。

然后你有这一行:

ratschlagMap.get(frage);

此方法返回键frage的值。但是你没有对这个值做任何事情,甚至没有把它分配给变量。这是一个错误。

答案 2 :(得分:0)

我可能错了,但在你的方法“frage Stellen”中你只做了ratchlag Map.get(frage);但你不要将它保存到变量中或返回它。

答案 3 :(得分:0)

有几个问题。

首先,String是不可变的 - 对它的任何操作都将创建一个新的String实例。如果您不想要它,那么您只能在需要的地方真正创建它:

 if (ratschlagMap.containsKey(frage.toLowerCase()))

其次,你没有返回任何东西 - 你没有声明你的方法。关于Map#get()的事情是,如果传入的密钥中不存在该值,它将返回null,这在您的情况下似乎是合理的。

这意味着写这个更直接,因为我们不需要真正检查存在:

public String frageStellen(String frage) {
    return ratschlagMap.get(frage.toLowerCase());
}