2016-09-22 14 views
0
public static void main(String[] args) { 
    TextIO.putln("Text?"); 
    String line = TextIO.getln(); 
    line = line.toLowerCase(); 
    char[] arr = line.toCharArray(); 
    for(int i = 0; i < line.length(); i++){ 
     if(Character.isLetter(arr[i])){ 
      int count; 
      int j; 
      for(j = 0,count = 0; j < line.length(); j++){; 
       if(arr[i] == arr[j]){ 
        count++; 
       } 
      } 
      System.out.printf("%c:%d\n", arr[i],count); 
     } 

    } 
} 

私は、文字列のジョシュを入力した場合、それは J出力し:私が入力した場合は1 :1 O:1 秒:1 時間1 O:1 秒:1 時間:2 時間:joshhそれは J印刷し2 を私は Jたい:1 O:1 秒:1 時間:2カウント手紙周波数と印刷文字:Java文字列で重複カウントではなく

私はどのように重複している文字列については、一意の文字のみを出力し、何回出現したのか?私はたぶん各文字をチェックし、( 'a':文字列)の のようなforループを実装することを考えていた 合計++ そして 'a'を1だけインクリメントするので、 bの出現、cの出現などがあります。

+0

すでに印刷された文字をListに追加し、List.contains(char)を使用して各後続の文字がリストにあるかどうかを確認できます。 Listにcharが含まれている場合は、カウントをスキップして次のcharに移動します。 – HomeIsWhereThePcIs

答えて

0

どのくらいのJavaを知っていますか?これは課題ですか?あなたはデータ構造を経験しましたか?二つのオプション:

  • ソートと(ユーザー名が示唆するように、あなたは、Pythonから来た場合、辞書)を
  • 使用して、マップを数え、その後、最初のパスでインクリメントと値を印刷するには、キーを反復
+0

csクラスへのイントロ、データ構造は間違いありません –

0

これを試してください。

Map<Character, Integer> map = new LinkedHashMap<>(); 
for (char c : line.toCharArray()) 
    if (Character.isLetter(c)) 
     map.compute(c, (k, v) -> v == null ? 1 : v + 1); 
for (Entry<Character, Integer> e : map.entrySet()) 
    System.out.printf("%c:%d\n", e.getKey(), e.getValue()); 
0
public static void main(String[] args) { 
    TextIO.putln("Text?"); 
    String line = TextIO.getln(); 
    line = line.toLowerCase(); 
    // char[] arr = line.toCharArray(); 
    Map<Character, Integer> occurrences=new LinkedHashMap<Character, Integer>(); 
    for(int i = 0; i < line.length(); i++){ 
     int ch=line.charAt(i); 
     if(Character.isLetter(ch)){ 
      if(occurrences.containsKey(ch)) { 
       occurrences.put(ch, occurrences.get(ch)+1); // increment 
      } 
      else { 
       occurrences.put(ch, 1); 
      } 
     } 
    } 
    for(char ch : occurrences.keySet()) { 
     System.out.print(ch+":"+occurrences.get(ch)+";"); 
    } 
    System.out.println(); 
} 
0

私が言うことができるものから、問題は、印刷中に使用しているループのためにあるように、それが見えます。

何が起こるかは、文字列内のすべての文字を評価して印刷することです。ジョシュの最初のhを評価すると、プログラムは2番目のhに移動し、再度評価し、結果としてhとそのカウントを再び表示します。

ユニークな要素を説明する辞書などのデータ構造を試すことができます。または、文字が何回表示されたかを数えると、既に見えている文字を保持する別の配列を持つことができます。文字が何回表示されているかを調べる前にこの配列をチェックすると、文字がすでにカウントされているかどうかが分かります。そうであれば、この文字をスキップして次の文字に進むことができます。最も洗練された解決策ではありませんが、それはうまくいくでしょう

関連する問題