2

カテゴリの最高の割合を取得しようとするプログラムを書いています(これらのカテゴリはEntryオブジェクトに格納されています)。今やろうとしているのは、条件であるため、最高の割合のすべてのカテゴリを格納することです。したがって、質問は次のとおりです。「パーセンテージ値が最も高いカテゴリをどのように保存できますか?」これまでのところ、私のコードは次のようになっています。

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]?
4

2 に答える 2

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());   
}

あなたのコードでそれをよりよく理解してみてください。

于 2012-10-19T06:20:33.657 に答える
1

最も簡単なことは、1行追加することです。

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

新しい「最高のパーセンテージ」を見つけたら、古いものでビンを空にするだけです。これらには、パーセンテージが低いエントリを含めることはできません。

于 2012-10-19T06:31:46.290 に答える