所以下面我试图演示一个有点现实的版本,说明如何使用伪代码实现我的程序..所以我有一个hashmap。我打算阅读一个文本,并在添加字母表的字符时递增;所以最终结果将是" doog" d = 1 o = 2 g = 1。
它会遍历文本并返回值,但是它会为每个字符提供不正确的计算。我的代码似乎完全有效,它正在计算字符,但只是不等于应该是什么= /如果有人对为什么计算错误有任何想法,请向我解释。
while((text = something.readLine()) != null){
for i = 0; i < text i++
{
if (hash map already contains the key at text.charAt(i){
continue;
}add the following to my hashmap(text.charAt(i), incrementer++);
}
else{
add (text.charAt(i), incrementer);
}
}
}
答案 0 :(得分:0)
很难读取你的伪代码,但我认为你在循环中增加了太多次。对于哈希映射中存在的每个评估,可能会错过一两个字符。只需增加for循环定义,就可以正常工作。
答案 1 :(得分:0)
一个错误: continue语句:在java中它将跳转到for循环,并且不会在hashmap中使用字符计数器,但它应该这样做。
答案 2 :(得分:0)
如果您打算计算字符串中字符的出现次数,那么主题行应该更清楚。
public static Map<String, Integer> getOccurences(String string) {
Map<String, Integer> occurenceMap = new LinkedHashMap<>();
String[] strArray = string.split(StringUtils.EMPTY);
int count = 0;
for(String str : strArray) {
if(occurenceMap.containsKey(str)) {
continue;
}
count = StringUtils.countMatches(string, str);
occurenceMap.put(str, count);
}
return occurenceMap;
}
没有Apache Commons的备用版本。
public static Map<String, Integer> getOccurences(String string) {
Map<String, Integer> occurenceMap = new LinkedHashMap<>();
String[] strArray = string.split("");
int count = 0;
for(String str : strArray) {
if(occurenceMap.containsKey(str)) {
count = occurenceMap.get(str).intValue();
count++;
} else {
count = 1;
}
occurenceMap.put(str, count);
}
return occurenceMap;
}