2016-04-16 5 views
1

私はそれについてどうやってどうやって行けばいいのか分かりませんが、私はコメントしたコードで見られるようなソート方法が必要だと知っていますが、どの変数(参照とプリミティブ)このメソッドを構築することを考慮して配置されています。私は自分のコードで少し失われてしまった。このプログラムを追加して、出力を最高周波数から最低周波数にソートする方法はありますか?

class Big 
    { 
     private static String ALLCHARS = "abcdefghijklmnopqrstuvwxyz"; 
     private static String[] SortedArray = new String[26]; 

     public static void main(String[] args) 
     { 
      LetterCount[] histogram = new LetterCount[26]; 
      // Array of LetterCount Objects. 
      arrayInitializer(histogram); 
      //arraySorter(histogram); 
      String input = args[0].toLowerCase(); 

      for (int i = 0; i < input.length(); i++) { 
       char c = input.charAt(i); 
       if (ALLCHARS.indexOf(c) == -1) { 
        continue; 
       } 
       int posOfC = ALLCHARS.indexOf(c); 
       /*System.out.println(c + ": " + posOfC); 
       System.out.println(histogram[posOfC]); 
       We got rid of these print statements because were using the asString method 
       */ 
       // Any one element in the histogram[] is a letter count object. 
       histogram[posOfC].count++; 
       //Only objects can be null, posOfC is an int. 
       //histogram is a null pointer in this current code. 
      } 

      for (int i = 0; i < histogram.length; i++) { 
       System.out.println(histogram[i].asString()); 
      } 
     } 
     private static void arrayInitializer(LetterCount[] input) { 
      for (int i = 0; i < input.length; i++) { 
       LetterCount lettcount = new LetterCount(); 
       lettcount.count = 0; 
       lettcount.letter = ALLCHARS.charAt(i); 
       input[i] = lettcount; 
      } 
     } 
     private static void arraySorter (LetterCount[] input, String[] ToBeSorted) { 
     // for (int i = 0; i < input.length; i++) 
      //  if (input[i] < ToBeSorted[i]) 
        // swap(input[i], ToBeSorted[i]); 

     } 
     // private static void swapMethod (LetterCount[] input1, String[] input2) { 
      // int temporarySwapVariable = LetterCount[input1]; 
      // String[input2] = temporarySwapVariable; 
     // LetterCount[input1] = String[input2]; 
     //} 
    } 
    // 
    class LetterCount { 
     char letter; 
     int count; 

     public String asString() { 
      return letter + ":" + count; 
     } 
    } 

答えて

2

最良の方法は、あなただけ簡単にそれをソートするためのライブラリ関数を使用することができますので、あなたのLetterCountクラスがComparableを作ることである:以下 コードです。これに変更LetterCount:

class LetterCount implements Comparable { 

    char letter; 
    int count; 

    public String asString() { 
     return letter + ":" + count; 
    } 

    @Override 
    public int compareTo(Object t) { 
     return ((LetterCount) t).count - count; 
    } 
} 

そして、あなたがする必要があるすべては、あなたがそれをプリントアウトする直前に、配列をソートするためのコードを追加します:

Arrays.sort(histogram); 

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

あなたはまた、import java.util.Arrays;

にする必要があります

説明:

Comparableは、クラスのインスタンスを別のインスタンスと比較する方法をjavaに伝えるために使用できるインターフェイスです。これは、javaがあなたのために配列をソートできるようにします(2つの要素を比較する方法が分からない限り、javaはソートできません)。これが動作する方法は、implements ComparableがメソッドcompareToをオーバーライドし、そのオブジェクトをそのタイプの別のオブジェクトと比較する方法を指定する必要があるものです。

編集:

数0、if文ちょうどあなたのprintメソッドに追加すると、文字印刷しません:

for (int i = 0; i < histogram.length; i++) { 
    if (histogram[i].count != 0) { 
    System.out.println(histogram[i].asString()); 
    } 
} 
+0

nhouser9を、 はありがとうございました!これはちょうど私が必要とした答えのようなものでした。あなたの説明は元々ですが、ほとんどの人が答えを出して説明していないので、私は心から感謝しています。 1つの簡単な質問をさらに展開して、これを編集して0の値で検出された文字を印刷しないようにするにはどうすればよいですか? if文を初期化するだけで? – Synergy76

+0

@ Synergy76お手伝いを喜んで! 0値を出力しないように変更するには、印刷コードの中にifステートメントを追加するだけです。私の答えの一番下を参照してください - 私は編集を追加します – nhouser9

+0

これは本当にあなたの助けをありがとう、私の一日を作った。私は今、さらに学ぶことができるテンプレートのビットを持っています。本当に感謝の気持ちを表明できないように、ありがとうございました。あなたの週末には素晴らしい休日がありますように! – Synergy76