2010-05-03 67 views
1

在「編程珍珠」中,我遇到了以下問題。問題是這樣的:「按照頻率降低的順序打印文字」。據我所知問題是這樣的。假設有一個給定的字符串數組,我們稱之爲s(字我都隨機選擇,也沒關係),編程珍珠中的字頻

String s[]={"cat","cat","dog","fox","cat","fox","dog","cat","fox"}; 

我們看到,字符串「貓」出現4次,「狐狸」 3次,「狗「2次。所以期望的結果將是:

cat 
fox 
dog 

我寫了下面的代碼的Java:

import java.util.*; 
public class string { 
    public static void main(String[] args){ 
     String s[]={"fox","cat","cat","fox","dog","cat","fox","dog","cat"}; 
     Arrays.sort(s); 
     int counts; 
     int count[]=new int[s.length]; 
     for (int i=0;i<s.length-1;i++){ 
     counts=1; 
     while (s[i].equals(s[i+1])){ 
      counts++; 
     } 
     count[i]=counts; 
     } 
    } 
} 

我已經排序的數組並創建了一個計數陣列,其中我寫的每一個出現的次數單詞在數組中。

我的問題是,不知何故整數數組元素和字符串數組元素的索引是不一樣的。如何根據整數數組的最大元素打印單詞?

+2

davit-datuashvili,你能清理一下你的文章嗎?修復一些拼寫錯誤並縮進代碼,使其顯示格式良好。請參閱:http://stackoverflow.com/editing-help – 2010-05-03 07:42:44

+0

人們喜歡標點符號,就像電腦一樣。 ; v) – Potatoswatter 2010-05-03 07:47:24

+0

請告訴我如何讓它更具可讀性? – 2010-05-03 07:48:45

回答

7

爲了跟蹤每個單詞的計數,我會使用一個Map來映射一個單詞到它的當前計數。

String s[]={"cat","cat","dog","fox","cat","fox","dog","cat","fox"}; 

Map<String, Integer> counts = new HashMap<String, Integer>(); 
for (String word : s) { 
    if (!counts.containsKey(word)) 
     counts.put(word, 0); 
    counts.put(word, counts.get(word) + 1); 
} 

要打印結果,請通過地圖上的鍵並獲取最終值。

for (String word : counts.keySet()) 
    System.out.println(word + ": " + (float) counts.get(word)/s.length); 
+0

非常感謝非常多 – 2010-05-03 08:06:57

+1

另一種計算單詞出現的方法是Collections.frequency, ,但在這種情況下,它將具有更高的BigO。 – 2010-05-03 08:10:29

+0

很高興知道。我看通過陣列的功能:)我想可以通過Arrays.asList去獲得最短的解決方案:) ...或者用Scala做到這一點:) – aioobe 2010-05-03 08:11:37

相關問題