计算循环中每个字母的出现次数,并显示具有最多出​​现次数的字母

时间:2015-10-27 12:01:33

标签: java loops

我在使用网上找到的代码时遇到了麻烦。我的目标是计算一个字母显示的次数并显示出现次数最多的字母,如果有两个或更多字母出现的次数相同,那么它们都会出现。

这是我目前的输出:  Current Output

以下是我在网上找到并使用的代码:

public void fcount(String str)
{

int[] occurence = new int[255];
   // Scanner scanner = new Scanner(System.in);
// str = scanner.nextLine();

// optional to put eveyting in uppercase
str = str.toUpperCase();
// convert to char
char[] digit = str.toCharArray();
// count
for(int i = 0; i < digit.length; i++)

    occurence[digit[i]]++;
// find max
int max = 0;           // max value
char maxValue = 0;      // max index
for(int i = 0; i < occurence.length; i++) 

    {
   // new max ?
   if(occurence[i] > max) {
      max = occurence[i];
      maxValue = (char) i;
   }
}
// result
System.out.println("Character used " + max + " times is: " + (char) maxValue);
   // return "";
}

以下是我正在使用它的循环:

public void calpha()
{

char startUpper = 'A';
String cones = null;

for (int i = 0; i < 12; i++) {

    cones = Character.toString(startUpper);
    System.out.println(startUpper);

}
fcount(cones);

}

4 个答案:

答案 0 :(得分:1)

循环中有错误:

cones = Character.toString(startUpper);

您只是重新分配cones的值,因此fcount会收到一个只包含最后一个字符的字符串。

解决方案

cones += Character.toString(startUpper);

答案 1 :(得分:1)

试试这段代码:

public static void main(String[] args) throws IOException {
    char startUpper = 'A';
    String cones = "";
    for (int i = 0; i < 12; i++) {
        cones += Character.toString(startUpper);
        System.out.println(startUpper);
    }
    fcount(cones);
}

public static void fcount(String str) {
    HashMap<Character, Integer> hashMap = new HashMap<Character, Integer>();
    HashSet<Character> letters = new HashSet<Character>();
    str = str.toUpperCase();
    //Assume that string str minimium has 1 char
    int max = 1;
    for (int i = 0; i < str.length(); i++) {
        int newValue = 1;
        if (hashMap.containsKey(str.charAt(i))) {
            newValue = hashMap.get(str.charAt(i)) + 1;
            hashMap.put(str.charAt(i), newValue);

            if (newValue>=max) {
                max = newValue; 
                letters.add(str.charAt(i));
            }
        } else {
            hashMap.put(str.charAt(i), newValue);
        }           
    }

    System.out.println("Character used " + max + " times is: " + Arrays.toString(letters.toArray()));
    // return "";
}

答案 2 :(得分:0)

您的int[] occurence = new int[255];声明和用法存在问题:occurence[digit[i]]++可能导致IndexOutOfBoundsException,因为字符类型最多为2 ^ 16

答案 3 :(得分:0)

您的代码无法处理非ANSII字符。我的确如此。

import java.util.*;

class Problem {
    public static void main(String args[]) {
        final String input = "I see trees outside of my window.".replace(" ", "");

        final List<Character> chars = new ArrayList<>(input.length());
        for (final char c : input.toCharArray()) {
            chars.add(c);
        }

        int maxFreq = 0;
        final Set<Character> mostFrequentChars = new HashSet<>();
        for(final char c : chars) {
            final int freq = Collections.frequency(chars, c);
            if (freq > maxFreq) {
                mostFrequentChars.clear();
                mostFrequentChars.add(c);
                maxFreq = freq;
            }
            else {
                if (freq == maxFreq) {
                    mostFrequentChars.add(c);
                }
            }
        }

        for (Character c : mostFrequentChars) {
            System.out.println(c);
        }
    }
}