1

問題のメソッドは以下です。このメソッドは、文字列を受け取り、bag adt を使用してアイテムの頻度を返すことになっています。私はそれを機能させていますが、(たとえば)「テスト」と入力すると、出力T、S、およびTがそれぞれの(正しいとはいえ)周波数で表示されます。ただし、出力はT、Sとその周波数だけにしたいと思います。

    public int getFrequency(String str){
        int index=0;
        char[] nArray = new char[sArray.length];

        for(int i=0;i<sArray.length; i++){
            char a = sArray[i];
            String s = Character.toString(a);
            index = consonants.getFrequencyOf(s);
            if(index != 0 && consonants.contains(s)==true){
                for(int x=0;x<nArray.length;x++){
                    if(nArray[i] == sArray[x]){
                        continue;
                    }
                    else{
                        System.out.print(s + ": ");
                        System.out.println(index);
                        nArray[i] = sArray[i];
                        break;
                    }       
                }
            }
        }
        return index;
    }
4

2 に答える 2

0

HashMap対応する頻度で文字を保存するには、むしろ , を使用する必要があります。

public Map<Character, Integer> getFrequency(String str){

    String vowels = "aeiouAEIOU";
    Map<Character, Integer> freqMap = new HashMap<Character, Integer>();

    for(int i=0;i<str.length(); i++) {

        char ch = str.charAt(i);

        // If character is a not consonant.. continue with next iteration

        if (vowels.contains(ch)) {
            continue;
        }

        Integer val = freqMap.get(ch);

        if (val != null) {
            // Put new entry in Map.. With character and count = 1

        } else {
            // Increment val by 1, and update the map for this character
        }

    }
    return freqMap;
}

あなたのコードについての確認: -

index = consonants.getFrequencyOf(s);
if(index != 0 && consonants.contains(s)==true){

2番目の条件は私には漠然と見えます.. if , が含まれindex !=0ていることを意味するため..では、なぜもう一度確認するのですか??consonantss

それとも、あなたgetFrequencyOf(s)は封じ込めのチェック以外のことをしていて、私たちが見ることはできませんか??

于 2012-10-07T20:23:50.340 に答える
0

問題はelseブロックにあると思います。いずれにせよ、あなたはそれを手に入れます。ただし、サイクルが終了したときにのみ取得する必要があります。内部サイクルを次のように書き換える必要があります。

                public int getFrequency(String str){
                    char[] sArray = str.toCharArray();
                    char[] nArray = new char[sArray.length];
                    int[] fArray = new int[sArray.length];

                    for(int i=0; i < sArray.length; i++){
                        char a = sArray[i];
                        String s = Character.toString(a);

                        if(consonants.contains(s)==true){        

                            for(int x=0; x <= i; x++){
                                if(nArray[x] == sArray[i]){
                                    fArray[x]++;

                                    break;
                                }

                                if (x == i){
                                    nArray[i] = sArray[i];
                                    fArray[i] = 1;
                                }       
                            }                
                        }
                    }        

                    for (int k = 0; k < fArray.length; ++k){
                       if (nArray[k] == 0){
                           continue;
                       }

                       System.out.println(String.valueOf(sArray[k]) + ": " + String.valueOf(fArray[k]));
                    }

                    return fArray[fArray.length - 1];
                }
于 2012-10-07T21:49:53.957 に答える