当我使用“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);
}
}
}
谢谢!
答案 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());
}