2012-10-19 37 views
2

我正在編寫一個試圖獲得最高百分比類別的程序(其中這些類別存儲在Entry對象中)。我現在要做的是將所有類別百分比最高,因爲它是可以occur.So問題的條件是:「我如何存儲這些類別比例最高值?」這是我的代碼看起來像至今:從條目對象中獲取最高百分比值Java

double biggestPercentage = 0; 
String biggestPercentageCategory = null; 
ArrayList<String> biggestPercentageCategories = new ArrayList<String>(); 
double percentage = 0; 

System.out.println("\n"); 
System.out.println("Get user's most interested category:"); 
for(int i=0;i<entrySet.size();i++){ 
    allEntries = entrySet.get(i); 
    if(allEntries.getValue() != 0){ 
     double calculatePercentage = allEntries.getValue(); 
     percentage = Double.parseDouble(df.format((calculatePercentage*100)/totalNumberOfContentForEachUser1)); 
     System.out.println("Percentage of " + allEntries.getKey() + ": " + percentage +"%"); 
     if(percentage > biggestPercentage){ 
      biggestPercentage = percentage; 
      biggestPercentageCategory = allEntries.getKey(); 
     }   
    } 
    if(percentage == biggestPercentage){ 
     biggestPercentageCategories.add(allEntries.getKey());  
    } 
} 

HashMap<String,String> hashmap = new HashMap(); 
if(percentage > biggestPercentage){ 
    hashmap.put(userName, biggestPercentageCategory); 
} 
else if(percentage == biggestPercentage){ 
    hashmap.put(userName, biggestPercentageCategories.toString()); 
} 
for(Entry<String, String> str : hashmap.entrySet()){ 
    System.out.println("\n"); 
    System.out.println(str); 
} 

輸出看起來是這樣的:

獲取用戶最感興趣的類別:

Percentage of Entertainment_Culture: 12.5% 
Percentage of War_Conflict: 12.5% 
Percentage of Sports: 25.0% 
Percentage of Hospitality_Recreation: 12.5% 
Percentage of Human Interest: 12.5%<br> 
Percentage of Education: 25.0% 

dryice1993=[Entertainment_Culture, War_Conflict, Sports, Education] 

其中'dryice1993'只是該用戶的用戶名。

但預期輸出我想要的是:

dryice1993=[Sports, Education]? 
+3

您可能想要使用排序 –

+0

您可以這樣做1)對收集進行排序2)找到第一個條目的百分比3)找到所有條目具有相同最大百分比 –

回答

1

最簡單的事情是添加一行:

if(percentage > biggestPercentage){ 
     biggestPercentage = percentage; 
     biggestPercentageCategory = allEntries.getKey(); 
     biggestPercentageCategories.clear(); // <-- add this one 
}   

Whenenver你找到一個新的「最高比例」,那麼你只清空回收站用舊的。這些不能包含百分比較低的條目。

+0

使它成爲'> ='並且在清除之前放一個if以查看它是否爲'!='? – Prasanth

+1

@goldenparrot:不,因爲我的代碼段下面有兩行,你會看到真正的「添加」操作。那裏'=='已經就位,這就夠了。 –

+1

Oh A.H.方法有效!無論如何,我非常感謝你在努力幫助goldenparrot的努力 –

2

的事情是,在每一次迭代,你正在服用取決於biggestPercentage到目前爲止的決定。

所以,你必須做的是,轉移這些行:

if(percentage == biggestPercentage){ 
    biggestPercentageCategories.add(allEntries.getKey()); 
} 

下面你目前彼此for循環。

是這樣的:

  1. 所有條目
  2. 第一迭代找到的最大的百分比
  3. 然後再重複看什麼都等於最大百分比
  4. 將它們添加到類別

編輯:

插入

} 
for(int i=0;i<entrySet.size();i++){ 
    percentage = allEntries.getValue(); 

if(percentage == biggestPercentage){ 
    biggestPercentageCategories.add(allEntries.getKey()); 
} 
在你的代碼

,並嘗試理解它更好。

+0

對於第3步,這是在for循環是否正確?還有它在其他for循環中迭代了什麼? –

+0

@MarcusDryiceKoh編輯。 – Prasanth