有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中使用数组计算字母频率

我有一个作业,通过迭代字符串中的字符来执行字母频率分析

我不确定如何使用数组来存储每个字母的频率。数组必须按字母顺序排列,并存储非字母字符(包括空格)

不幸的是,我必须使用数组来存储频率

用Java完成这项任务的最佳方式是什么


共 (1) 个答案

  1. # 1 楼答案

    直接的方法是使用两个数组,一个用于存储字符串中出现的字符,区分大小写,另一个用于存储其相应的频率

    这两个数组都是以字符串长度的大小声明的,下面的示例代码展示了如何通过使用数组和简单逻辑来实现所需的内容

    示例代码

    String str = "The array must be in alphabetical order and also store non-alphabetical characters (including spaces)";
    
    char[] charArr = new char[str.length()];
    int[] freqArr = new int[str.length()];
    int idx = 0;
    for (int i = 0; i < str.length(); i++) {
        char c = str.charAt(i);
        boolean isFound = false;
        for (idx = 0; idx < str.length(); idx++) {
            if (freqArr[idx] == 0) {
                break;
            }
            if (c == charArr[idx]) {
                freqArr[idx]++;
                isFound = true;
                break;
            }
        }
        if (!isFound) {
            charArr[idx] = c;
            freqArr[idx]++;
        }
    }
    
    //Sort charArr and freqArr arrays
    char tempChar;
    int tempFreq;
    for (int i = 1; i < str.length(); i++) {
        for (int j = i; j > 0; j ) {
            if (charArr[j] < charArr [j - 1]) {
                tempChar = charArr[j];
                charArr[j] = charArr[j - 1];
                charArr[j - 1] = tempChar;
    
                tempFreq = freqArr[j];
                freqArr[j] = freqArr[j - 1];
                freqArr[j - 1] = tempFreq;
             }
        }
    }
    

    打印字母频率

    for (int i = 0; i < str.length(); i++) {
        if (freqArr[i] != 0) {
            System.out.printf("%s:%d", charArr[i], freqArr[i]);
            System.out.println();
        }
    }
    

    控制台输出

    [ :13],[(:1],[):1],[-:1],[T:1],[a:13],[b:3],[c:6],[d:3],[e:8],...