Javaで質問です。
ランキングを作成するメソッドを作りたいのですが、どう作ればいいかわかりません。
BigDecimalのある定数でdevideして小数部だけを抽出し、その値の大きい順がランキングになります。
ただし、小数部の値が同じである場合、整数部の大きい方が上位になります。
public class Ranking {
static final Map<String,Integer> MAP1;
static {
Map<String,Integer> MAP = new HashMap<String,Integer>();
MAP.put("牡羊座",321);
MAP.put("牡牛座",421);
MAP.put("双子座",521);
MAP.put("蟹座",622);
MAP.put("獅子座",724);
MAP.put("乙女座",824);
MAP.put("天秤座",924);
MAP.put("蠍座",1024);
MAP.put("射手座",1123);
MAP.put("山羊座",1223);
MAP.put("水瓶座",121);
MAP.put("魚座",220);
MAP1 = Collections.unmodifiableMap(MAP);
}
public Map<String,BigDecimal> getRankNum(){ BigDecimal[] value = new BigDecimal[12]; BigDecimal[] uvalue = new BigDecimal[12]; int i = 0; BigDecimal btoday = new BigDecimal(getTodayNum()); MAP<String,BigDecimal> bnumMap = new HashMap<String,BigDecimal>(); MAP<String,BigDecimal> inumMap = new HashMap<String,BigDecimal>(); for(Map.Entry<String, Integer> e : MAP1.entrySet()){ i += 1; value[i] = new BigDecimal(e.getValue()).divide(btoday,6,BigDecimal.ROUND_HALF_UP); uvalue[i]= value[i].remainder(new BigDecimal(1)); inumMap.put(e.getKey(),value[i]); bnumMap.put(e.getKey(), uvalue[i]); } List<Entry<String, Integer>> entries = new ArrayList<Entry<String, Integer>>(bnumMap.entrySet()); Collections.sort(entries, new Comparator<Entry<String, BigDecimal>>() { public int compare(Entry<String, BigDecimal> o1, Entry<String, BigDecimal> o2) { return o2.getValue().compareTo(o1.getValue()); //降順 }
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/26 12:26