计算数组中元素出现的次数

2024-04-14

char [] array = {a,a,a,b,b,c,c,c,a,d};

我想计算该数组中的每个相同元素,以便可以将其从最高频率到最低频率进行排序。 我希望输出变成这样:

4 (for a)
2 (for b)
3 (for c)
1 (for d)

我已经尝试过这个

public static void CountbyChar(String s){
    int [] arr = new int [s.length()];
    char [] c =s.toCharArray();
    for (int i=0;i<c.length;i++){
        arr[i]=1;
        for (int j=i+1;j<c.length;j++){
            if(c[i]==c[j]){
                arr[i]++;
            }
        }
    }
    for (int x:arr){
        System.out.println(x);
    }
}

但我得到了:

4
3
2
2
1
2
1
1

我的错在哪里?


问题在于您正在为字符串中的每个字符创建一个新计数器,而不是为每个可能的字母创建一个计数器。本质上,您的程序会计算某个字符在字符串中当前字符之后的位置中出现的次数。

解决这个问题应该相对容易:为字母表中的每个字母创建计数器,并在看到相应的字母时增加它们。假设您区分大小写,您可以这样做:

public static void CountbyChar(String s){
    int [] arr = new int [256];
    for (char c : s.toCharArray()){
        if (c < 256) {
            arr[c]++;
        }
    }
    for (int i = 0 ; i != 256 ; i++) {
        if (arr[i] != 0) {
            System.out.print((char)i);
            System.out.print(" : ");
            System.out.println(arr[i]);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算数组中元素出现的次数 的相关文章

随机推荐