1

私はJavaスキャナーを使用してキーボードからテキストの文字列を入力し、プログラムにazを出力するテーブルを作成させ、入力された文字列内で見つかった各文字の番号を表示しています。(文字の頻度)

私のドライバー/メインクラス

import java.util.*;

public class LetterDriver{
  public static void main(String[] args){
    Scanner s = new Scanner(System.in);
    LetterProfile profile = new LetterProfile();
    String tScan = " ";
    int numReturns = 0;
    while(numReturns < 2){
      tScan = s.nextLine();
      if (tScan.length() == 0){
        numReturns++;
      }
      else{
        profile.countChars(tScan);
        numReturns = 0;
      }
    }
    profile.printResults();

  }

}

マイプロファイルクラス

public class LetterProfile {
  int score[] = new int [26];

   public void countChars (String s) {
    s = s.toLowerCase();
    char a = 'a';
    for (int i = 0; i < s.length(); i++) {
      int next = (int)s.charAt(i) - (int) a;
      if ( next<=26 && next >= 0)
        score[next]++;


    }
 }

    public int largestLength() { 
      int largest = 0;
      int largestindex = 0;
      for(int a = 0; a<26; a++) {
        if(score[a] > largest) {
        largest = score[a];
        largestindex = a;

      }
      }
      return (char)largestindex;

    }


    public void printResults() {
       largestLength();

      System.out.println(("Most Frequent") + (" :") + largestLength());
    }
}

プログラムはコンパイルされ、実行すると入力を入力できますが、出力されるのは数字の形式で最も頻繁に使用される文字だけです(配列は0〜25であり、0 = a、1であるため) = b)

基本的に、私がやろうとして苦労しているのは、コードの横に文字の頻度を表示しながら、azのテーブルを出力させることです。これを行う簡単な方法はありますか?

ありがとう。

4

2 に答える 2

2

私が理解しているかどうかはわかりません-もちろん、最も頻繁な文字を印刷するだけです-それがprintResultsメソッドが行うことのすべてです。

配列をループしてscore、対応する文字の横に各スコアを印刷するだけで、度数分布表全体が得られます。

これをすでにprintResultsメソッドにあるコードに追加します。その結果、最も頻度の高い文字が最初に印刷され、次に数字の1から始まる文字の頻度のリストが印刷されます。

for (int i = 0; i < score.length; i++) {
    System.out.println( (i+1) + ": " + score[i]);
}

例えば:

Most frequent: e
1: 5
2: 0
3: 2
4: 0
5: 15
...

等。

于 2013-03-20T00:01:27.060 に答える
0

これを試して:

for (int i = 0; i<score.length; i++){
System.out.println(score[i]);
}

また、これを読んで、ステートメントについてよく理解してください。

于 2013-03-20T00:02:44.877 に答える