2012-10-19 38 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