einfuegen()
多次。如下面的代码块所示:
Woerterbuch woerterbuch2 = new Woerterbuch2();
for (Medium m : medienliste) {
for (String s : m.getWorte()) {
woerterbuch2.einfuegen(s);
}
}
顺便说一下,我测试了变量的所有循环和赋值。
现在einfuegen()
应该将所有字符串s
放入地图中。请参阅以下代码块:
public class Woerterbuch2 implements Woerterbuch{
HashMap<String, Integer> liste = new HashMap<>();
public void einfuegen(String word) {
// I have deleted all the previous unimportant code
liste.put(word, 1);
}
}
我的地图只包含一个条目,虽然函数einfuegen()
正在运行多次,并且有多个不同的字符串分配给word
。
通常我的地图应包含50多个不同的单词,因为einfuegen()
的执行次数超过50次。
我的假设是Java会覆盖从1
到word
的连接,因为1始终是Integer的同一个实例。
如果我是对的,我仍然不知道如何解决它。
感谢您的帮助。 我真的很期待它=)
答案 0 :(得分:1)
您总是在einfuegen中创建地图。这就是问题。将Map liste声明为实例变量。
示例:
Class X{
private Map<String, Integer> liste = new HashMap<>();
Woerterbuch woerterbuch2 = new Woerterbuch2();
for (Medium m : medienliste) {
for (String s : m.getWorte()) {
woerterbuch2.einfuegen(s);
}
}
public void einfuegen(String word) {
// I have deleted all the previous unimportant code
liste.put(word, 1);
}
}
答案 1 :(得分:0)
如果您的所有钥匙都有超值,则无关紧要。但是如果你给的是常量密钥则很重要。如果所有密钥都相同,则会生成一个条目。调试代码以确保密钥是唯一的。
1)在m.getWorte()中打印值,检查发送的所有密钥是否唯一。
查看示例代码
HashMap<String, Integer> myMap = new HashMap<>();
myMap.put("s", 1);
myMap.put("r", 1);
myMap.put("m", 1);
System.out.println(myMap); // This prints {r=1, s=1, m=1}
HashMap<String, Integer> myMap1 = new HashMap<>();
myMap1.put("s", 1);
myMap1.put("s", 2);
myMap1.put("s", 3);
System.out.println(myMap1); // This prints {s=3}
即条目在hashmap中生成,无论值是否为常量,如果键相同而不管值是否相同,则在hashmap中忽略条目