質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

4578閲覧

Javaのランキングメソッドの作り方がわかりません

YoshidaYuhei

総合スコア27

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/06/26 07:36

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/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず各BigDecimalを割った結果とその整数部分を出しておきます。結果から整数を引けば小数部分になるので、その小数部分を比較します。異なる値ならそのcompare値を返し、同じなら整数部分同士の比較の結果を返せばいいと思います。


改めて考えてみましたが、小数にする意味は無いですね。割った余りを考えれば十分そうです。

投稿2016/06/26 08:26

編集2016/06/26 10:11
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YoshidaYuhei

2016/06/26 12:26

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問