2013-04-20 61 views
0

我有這個代碼工作正常,但結果顯示如下。如何讓每個相同的字符只顯示一次計數?

public static int[] countlist (char[] list){ 

    int [] counts = new int[list.length]; 

    for (int k = 0; k < list.length; k++) { 

     for (int m = 0; m < list.length; m++) { 
      if (list[m] == list[k]){ 
       counts[m]++; 
      } 
     } 



     System.out.println("Letter " + list[k] + " = " + counts[k]); 
     } 
    } 

輸出:

Letter T = 1 
Letter T = 2 
Letter N = 1 
Letter T = 3 
Letter Z = 1 
Letter N = 2 
Letter H = 1 
Letter H = 2 

怎麼辦我必須做的就是爲每個字母一旦輸出? 非常感謝 例如,我要輸出到像下面

Letter T = 3 
Letter N = 2 
Letter Z = 1 
Letter H = 2 

回答

0

我沒那麼熟悉Java但我可以輸入代碼很快,但現在基本上可以創建一個數組,並有鑰匙是字母和字母

在PHP這樣的工作一樣東西的價值值:

$array = array(); 

$array['T'] = 1; 
$array['T'] = 2; 
$array['T'] = 3; 
$array['N'] = 2; 
$array['Z'] = 1; 
$array['H'] = 2; 

echo print_r($array); //Resulting in T=>3, N=>2, Z=>1, H=>2 

如果你不希望(例如)T的第一個值將覆蓋所有你必須要做的是實現一個我F語句檢查$ array ['T']是否已經存在。

編輯: 在你提供的代碼,你就必須實現它,我已經將其標記:

public static int[] countlist (char[] list){ 

    int [] counts = new int[list.length]; 

    for (int k = 0; k < list.length; k++) { 

     for (int m = 0; m < list.length; m++) { 
      if (list[m] == list[k]){ 
       counts[m]++; 
      } 
     } 

     //====Insert the code here==== 

     System.out.println("Letter " + list[k] + " = " + counts[k]); 
    } 
} 
3

使用HashMap來保存單個字符的計數/頻率。

遍歷列表,併爲每個元素做:

  • 如果該元素是不存在的HashMap中,隨着頻率1
  • 如果該元素存在於HashMap的插入,提高頻率減去1.

最後,打印HashMap的鍵/值對將會給你想要的輸出。

+1

正是我試圖說,但你的回答是更清晰,美觀大方! – xorinzor 2013-04-20 23:49:53

0

存儲結果的基元數組是強制的嗎?您可以使用Hashmap並將字母定義爲鍵和計數器作爲值。

Map<Character, Integer> charactersOccurrences = new HashMap<Character, Integer>(); 

for (int k = 0; k < list.length; k++) { 
    if (charactersOccurrences.containsKey(list[k])) { 
     charactersOccurrences.put(list[k], charactersOccurrences.get(k) + 1); 
    } else { 
     charactersOccurrences.put(list[k], 1); 
    } 
} 

然後打印:

for(char aLetter : charactersOccurrences.keySet()) { 
    System.out.println("Letter " + aLetter + " = " + charactersOccurrences.get(aLetter)); 
} 
+0

是的,這是強制性的。有沒有其他方法可以不使用Hashmap? – userpane 2013-04-21 00:53:44

+0

我看到的問題是您想要將每個字符與一個整數相關聯,這是不同的類型,所以我們不能使用二維數組。我會說創建一個char和int屬性的對象,然後是它的一個數組,然後做類似於Hashmap的事情。你被允許這麼做嗎? – 2013-04-21 01:21:31

0
public static void countlist (char[] list) 
{ 
    Map<Character, Integer> map = new HashMap<Character, Integer>(); 

    for (int k = 0; k < list.length; k++) 
    { 
     if (map.containsKey(list[k])) 
     { 
      map.put(list[k], map.get(list[k]) + 1); 
     } 
     else 
     { 
      map.put(list[k], 1); 
     } 
    } 

    for (Map.Entry<Character, Integer> entry : map.entrySet()) 
    { 
     System.out.println("letter = " + entry.getKey() + ", count = " + entry.getValue()); 
    } 
} 
相關問題