gpt4 book ai didi

java - 字符的排序频率

转载 作者:行者123 更新时间:2023-11-29 10:14:35 25 4
gpt4 key购买 nike

我刚刚做了一个算法来计算字符串中字符的频率。我感到困惑的是如何对频率进行排序,以便出现次数最多的字符列在顶部,最少的列在底部。

起初我尝试让另一个变量“fc”(用于频率计数器)与我原来的计数器变量“k”一致。然而,我陷入了如何对这个频率进行排序的思考过程中,我制作的 fc var 毫无用处。

感谢您提供的任何帮助!

这是我的代码:

  import java.io.*;
public class Freq
{
public static void main(String args[])throws IOException
{
//read input stream
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
int ci,i,j,k,l,fc;l=0;
String str,str1;
char c,ch;
System.out.println("Enter your String");
str=in.readLine();
i=str.length();
//cycle through ASCII table chars and obtain chars typed
for(c='A';c<='z';c++)
{
k=0;
fc=0; //fc keeps count like k
for(j=0;j<i;j++)
{
ch=str.charAt(j);
if(ch==c)
k++;
fc=k-1; //was going to represent this counter for 'less than k'

}
if(k>0)
System.out.println("The character "+c+" has occured for "+k+" times");
}
}
}

最佳答案

您需要先将它们全部存储起来。您可以使用 HashMap 来存储它们,这也将简化您的计数程序。然后对条目集进行 Collections.sort。您将需要制作一个 Comparable> 来比较条目值以进行排序。

编辑以添加示例代码....

    BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter your String");
String line = in.readLine();
HashMap<Character,Integer> counts = new HashMap<>();
for(char c : line.toCharArray()) {
Integer count = counts.get(c);
if (count == null) {
count = 0;
}
counts.put(c, ++count);
}
List<Entry<Character,Integer>> list = new ArrayList<>(counts.entrySet());
Collections.sort(list, new Comparator<Entry<Character,Integer>>() {
@Override
public int compare(Entry<Character, Integer> o1,
Entry<Character, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
for(Entry<Character,Integer> entry : list) {
System.out.println("The character "+entry.getKey() +" has occured for "+ entry.getValue()+" times");
}

关于java - 字符的排序频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21325022/

25 4 0
文章推荐: java - List> 和 List 不一样吗