gpt4 book ai didi

java - 迭代器在打印值时缺少 TreeSet 中的一个元素

转载 作者:行者123 更新时间:2023-12-01 11:20:52 26 4
gpt4 key购买 nike

我正在解决的问题是,我必须计算输入中重复字符的出现次数,并按降序打印那些计数超过 n 次的字符的字符串。

我已经编写了代码,但由于我的迭代器缺少一个字符,即使它满足标准

示例输入是:

abbababbabkeleeklkel 
3 (=N) // where N=3

示例输出为:

bae
as
1)b appears 6 times
2)a appears 4 times
3)e appears 4 times

代码是:

 private static void printDuplicate(String s, int times){ 

TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
boolean isAppear = true;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
int count = 1;
if(tm.containsKey(ch)){
count=tm.get(ch) + 1;
}
tm.put(ch, count);
}
StringBuilder temp = new StringBuilder("");
TreeSet<CharItem> ts = new TreeSet<CharItem>();
Iterator<Character> it = tm.descendingKeySet().iterator();


while (it.hasNext()){
char ch = (char) it.next();
int count = tm.get(ch);
CharItem ci= new CharItem(ch, count);
ts.add(ci);
System.out.println("Character is " + ch + " count is " + ci.getCount());
}
Iterator<CharItem> it2 = ts.iterator();


while(it2.hasNext()){

CharItem ci=it2.next();


System.out.println("Ci key value " + ci.getCh() + " and count is " + ci.getCount());


if(ci.getCount() >times){

isAppear=false;

temp.append(ci.getCh());
}

}

if(isAppear){
System.out.println("NONE");
}
else
System.out.println(temp);
}
}

但是我收到的输出是“be”。缺少一些字符 a。有人可以告诉我可能是什么问题吗?

CharItem 是一个实现 Comparable 的类:

class CharItem implements Comparable<CharItem>{
private int count;
private char ch;
public CharItem(char c, int i){
count = i;
ch = c;
}
public char getCh() {
return this.ch;
}
public int getCount() {
return this.count;
}
@Override
public int compareTo(CharItem b) {
return b.count - this.count ;
}

最佳答案

问题在于 CharItem 中 Comparator 的实现。如果您的 CharItem 在字符串中出现的次数相同,则它们是相等的。所以你必须考虑你的性格。您应该将比较器更改为:

@Override
public int compareTo(CharItem b) {
int occurences = Integer.compare(b.count, count);
if (occurences == 0) {
return Character.compare(ch, b.ch);
}
return occurences;
}

关于java - 迭代器在打印值时缺少 TreeSet 中的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31240192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com