gpt4 book ai didi

java - 使用带有自定义比较器的优先级队列根据字符串中的单词数进行排序?

转载 作者:行者123 更新时间:2023-12-02 08:45:58 25 4
gpt4 key购买 nike

我正在尝试使用优先级队列根据每个字符串中有多少个单词(空格)对字符串进行排序。我的代码仅在某些场景下有效,但当每个字符串的空格数量真正分散时则不起作用。我想是因为我的方法没有对它们进行全部比较。

Comparator<String> whiteSpaces = new Comparator<String>() {
int count1 = 0;
int count2 = 0;
char c = ' ';
@Override
public int compare(String s1, String s2) {
for(int i = 0; i < s1.length(); i++) {
if(s1.charAt(i) == c){
count1++;
}
}
for(int i = 0; i < s2.length(); i++) {
if(s2.charAt(i) == c) {
count2++;
}
}
return count1 - count2;
}
};

我可以修改我所拥有的内容,以便它与添加到优先级队列中的所有字符串进行比较吗?提前致谢。

最佳答案

由于您未在调用之间将 count1count2 重置为 0比较器 无法工作到compare()

实际上,问题在于 count1count2 是字段。它们应该是局部变量。

count1count2 声明移至方法中。

Comparator<String> whiteSpaces = new Comparator<String>() {
char c = ' ';
@Override
public int compare(String s1, String s2) {
int count1 = 0;
int count2 = 0;
for(int i = 0; i < s1.length(); i++) {
if(s1.charAt(i) == c){
count1++;
}
}
for(int i = 0; i < s2.length(); i++) {
if(s2.charAt(i) == c) {
count2++;
}
}
return count1 - count2;
}
};

其他改进:

  • 字段c应该是privatefinal,并且命名得更好。

  • 创建一个辅助方法来消除重复的代码。

  • 使用Integer.compare(a, b)代替减法。

Comparator<String> whiteSpaces = new Comparator<String>() {
private final char separator = ' ';
@Override
public int compare(String s1, String s2) {
return Integer.compare(countSeparators(s1), countSeparators(s2));
}
private int countSeparators(String s) {
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == separator) {
count++;
}
}
return count;
}
};

关于java - 使用带有自定义比较器的优先级队列根据字符串中的单词数进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61089048/

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