我正在尝试输出字符串中的第一个非重复字符。但是我不确定我的方法有什么问题,因为它总是返回null。任何暗示都非常受欢迎。
public static char findRepeating(String s){
HashMap<Character, Integer> charCount= new HashMap<>();
for (Map.Entry<Character, Integer> entry: charCount.entrySet()){
entry.setValue(0);
}
int count=0;
for (int i=0; i<s.length(); i++){
if (charCount.containsKey(s.charAt(i))){
count=charCount.get(s.charAt(i));
charCount.put(s.charAt(i), count++);
}
}
for (Character ch:charCount.keySet()){
if (charCount.get(ch)==0){
return ch;
}
}
return '\0';
}
答案 0 :(得分:1)
你的问题是这个循环什么都不做
for (Map.Entry<Character, Integer> entry: charCount.entrySet()){
entry.setValue(0);
}
因为地图是空的。
因此,if (charCount.containsKey(s.charAt(i)))
始终为假。如果找不到密钥,则应添加else子句以将计数初始化为1:
if (charCount.containsKey(s.charAt(i))){
count=charCount.get(s.charAt(i));
charCount.put(s.charAt(i), ++count); // changed to pre-increment
} else {
charCount.put(s.charAt(i), 1);
}
另请注意,我将count++
更改为++count
,因为count++
会返回count的原始值,因此地图中的值不会发生变化。
答案 1 :(得分:0)
因为你正在遍历没有元素的charcount。
Map.Entry<Character, Integer> entry: charCount.entrySet()