3

2 つのクラスを持つ課題があります。1 つはスキャナー ユーティリティを使用してキーボードから文字列を読み取り、文字の頻度を記録するドライバー クラスです。(入力文字列に各文字が何回出現するか)。私のプログラムは、2 つの Return を続けて入力するまで、テキスト行を入力し続ける必要があります。次に、コードは文字の頻度を出力し、続いて最も頻度の高い文字とその数を示すレポートを出力する必要があります (最も頻度の高い文字が同点の場合は、最も頻度の高い文字が表示されます)。また、私のコードは大文字と小文字を区別しないため、大文字と小文字をカウントする必要があります。

私のドライバークラスは

import java.util.*;

public class LetterDriver{
  public static void main(String[] args){
    Scanner s = new Scanner(System.in);
    String tScan = " ";
    while(tScan.length() > 0){
      tScan = s.nextLine();
    }
  }
}

私の実際のプロファイルクラスは

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

 public void countChars (String 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 void scoreLine (String lines) {  // prints letter + # of appearance
      int index = lines.length();
      for (int j = 0; j<index; j++) {
        score[j]++;
        System.out.println(j + score[j]);
     }
 }

    public int largestLength() { // finds most frequent letter
      int largest = 0;
      int largestindex = 0;
      for(int a = 0; a<26; a++) 
        if(score[a]>largest){
        largest = score[a];
        largestindex = a;
      }
      return largestindex;

    }


    public void printResults() {
       largestLength();
      System.out.println(largestLength());
    }
  }

再びコードがコンパイルされ、実行するとテキスト入力を入力できますが、2 回戻ると空白の出力が表示されます。プロファイル クラスがドライバー クラスから正しく読み込まれていないことに関係しているのではないかと思いますが、何が問題なのかわかりません。

4

4 に答える 4

2

Main メソッドでクラス LetterProfile をインスタンス化していない main メソッドでスキャナーからデータを読み取っているだけなので、何もしません。

于 2013-03-19T17:21:48.657 に答える
1

どこでもクラスを使用していませんLetterProfile!! 入力を読み取っているだけで、 に渡していませんLetterProfileLetterProfileドライバーでクラスをインスタンス化し、関連するメソッドを呼び出します。

ドライバー クラスは次のようになります。

public class LetterDriver{
  public static void main(String[] args){
    LetterProfile letterProfile = new LetterProfile();
    Scanner s = new Scanner(System.in);
    String tScan = " ";
    while(tScan.length() > 0){
      tScan = s.nextLine();
      letterProfile.countChars(tScan);
    }

    // Print the result
    letterProfile.printResults()
  }
}
于 2013-03-19T17:23:57.220 に答える
1

メインメソッドの入力からデータを取得しているだけなので、静的メインメソッドで LetterProfile という名前の2番目のクラスをインスタンス化する必要があるため、何もしません。Javaは、静的変数、静的メソッド、その他の読み取りからすべての問題を開始します..

于 2013-03-19T17:42:59.100 に答える