我有一个ArrayList<String>
和一个Hashtable<String, Double>
。因此,当我将arraylist与哈希表进行比较时,如果找到了键(字符串),则我想获取value(双精度)并在比较所有arraylist的末尾查找总值。但这总是得分为0。
有代码
ArrayList<String> Trigram = Trigrams.GenerateTrigrams(extra, 3);
// System.out.print(Trigram);
Hashtable<String, Double> map = readModleFile("Models//EnglishModel.txt");
double score = 0;
for (String temKey : Trigram) {
if (map.contains(temKey)) {
Double value = map.get(temKey);
score = score + value;
} else {
score = 0;
}
}
System.out.print(score);
您的else
分支总是将分数重置为0;除非地图包含列表的所有元素,否则总会至少重置一次分数。只需删除分支。
第二个问题是您正在使用contains
,而不是containsKey
检查一个键的存在,而不是检查一个键的存在。
for (String temKey : Trigram) {
if (map.containsKey(temKey)) {
Double value = map.get(temKey);
score = score + value;
}
}
也可以使用来缩短代码并使代码更简洁getOrDefault
,如果没有与键相关联的映射,则该代码将返回与键相关联的映射或第二个参数(默认值)。
for (String temKey : Trigram) {
score += map.getOrDefault(temKey, 0);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句