0

1つの単語を文字列として返すメソッドがあります。テキストのチャンクを読み取るメソッドによって返されるすべての単語を数える必要があります。問題は、カウントを正しく取得しているのに、出力が間違っていることです。繰り返します。どこがうまくいかないのかよくわかりませんか?

private int totalWords    = 0;
private static Map<String, Integer> wordFrequency = new HashMap<String, Integer>();


public static void findResult(CharacterReader characterReader)
{
    boolean x = true;
    CharBuffer buffer = CharBuffer.allocate(100);
    String str = "";
    try
    {

        while(x)
        {
        char cha = characterReader.getNextChar();
        Set<Character> charSet = new HashSet<Character>();
            charSet.add(',');
            charSet.add('.');
            charSet.add(';');
            charSet.add(':');
            charSet.add('\'');
            charSet.add('~');
            charSet.add('?');
            charSet.add('!');
            charSet.add('%');


            while(cha != ' ' && !charSet.contains(cha))
            {
                buffer.put(cha);
                cha = characterReader.getNextChar();
            }
            buffer.flip();
            str = buffer.toString();
            buffer.clear();



            countWords(str);

            System.out.println(wordFrequency);

        }
    }catch(EOFException e)

    {
        x = false;
    }


private static void countWords(String word)
        {

                if (wordFrequency.containsKey(word))
                {
                    Integer count = wordFrequency.get(word);
                    count++;
                    wordFrequency.put(word, count);
                    } else {
                    wordFrequency.put(word, 1);
                }
        }

public static void main (String args[])
{
    CharacterReader cr = new SimpleCharacterReader();
    findResult(cr);
}
4

3 に答える 3

1

動く

System.out.println(wordFrequency);

tryステートメントの外側へ。各単語の後にセット全体を印刷しています。

于 2012-06-19T01:43:12.823 に答える
0

これはすべて、System.out.printlnを配置した場所にあります。あなたはそれをループの中に持っています!

    while(x) {
        // .....

        countWords(str);

        System.out.println(wordFrequency);
    }

解決策:ループの後でそれを行います。

    while(x) {
        // .....

        countWords(str);

    }
    System.out.println(wordFrequency);
于 2012-06-19T01:42:32.963 に答える
0

System.out.println(wordFrequency);を移動してみてください。whileループ中括弧から...

于 2012-06-19T02:51:58.133 に答える