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

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

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

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

Q&A

解決済

2回答

610閲覧

Collections.sortによる点数のソート

nabe_u

総合スコア19

Java

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

0グッド

0クリップ

投稿2017/09/27 06:25

編集2017/09/27 06:32

###目的
Comparableインタフェースを用いて,Collections.sortメソッドでソート。
また、これをComparatorインタフェースで実装。

###問題点
int型で起動できないためInteger型にして比べましたが、データの順序が逆になるだけで点数順で上手くソート出来ません。
また、Collectios.sortでのソートが出来ないので、Comparatorインタフェースでのソートも出来ていません。

###ソースコード

import java.util.ArrayList; import java.util.Collections; public class SortScoreComparable { public static void main(String[] args) { ArrayList<Score> score = new ArrayList<Score>(); score.add(new Score("taro", 12, 97)); score.add(new Score("jiro", 42, 54)); score.add(new Score("sabu", 42, 47)); score.add(new Score("siro", 57, 97)); score.add(new Score("goro", 87, 40)); score.add(new Score("roku", 99, 99)); score.add(new Score("nana", 14, 23)); score.add(new Score("hati", 42, 54)); System.out.println("ソート前"); for (Score s : score) { System.out.println(s.getName() + " : Math: " + s.getMath() + " : English : " + s.getEnglish()); } Collections.sort(score); System.out.println("ソート後"); for (Score s : score) { System.out.println(s.getName() + " : Math: " + s.getMath() + " : English : " + s.getEnglish()); } } } class Score implements Comparable<Score> { private String name; private int math; private int english; public Score(String name, int math, int english) { this.name = name; this.math = math; this.english = english; } public String getName() { return name; } public int getMath() { return math; } public int getEnglish() { return english; } public int compareTo(Score another) { Integer Math = new Integer(math); Integer i = new Integer(another.getMath()); if (Math.compareTo(i) < 0) { //自分が相手よりも低い return -1; } else if (Math.compareTo(i) > 0){ //自分が相手よりも高い return 1; } else { //それ以外=同一順位 return 0; } } }

###備考
順序付けは,数学の成績が良い順とし,数学の成績が同点の場合は,英語の成績が良い順とし,それでも順序が付かない場合は同位とする。
多いかとは思いますが、どなたかお願いします。

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

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

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

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

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

kei344

2017/09/27 06:30

質問タグが「JavaScript」になっていますので、「JAVA」に付け替えてください。
guest

回答2

0

ベストアンサー

Javaの標準APIは、
しっかりと整備された日本語のドキュメントがあるので、(すごいありがたい)
不便だなと思うことがあればちゃんと調べてみること。(だいたいある)
あと、できれば命名規約についても調べて?Math変数はさすがにちょっと・・・

Java

1public int compareTo(Score another) { 2 int result = Integer.compare(this.math, another.math); 3 return (result == 0 ? Integer.compare(this.english, another.english) : result); 4}

Collections#sortで引数がList1つの場合は、
Comparable#compareToが正しく実装されている限り昇順ソートなので、
降順にしたければソート後Collections#reverseを使って結果をひっくり返す

余談:
「どっちも同点なら名前五十音順」とか追加したい場合は、
reverseしたときにそれごとひっくり返ってしまうので、
その時はComparator使ってごにょごにょする

投稿2017/09/27 08:10

abs123

総合スコア1280

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

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

nabe_u

2017/09/28 01:09

回答ありがとうございます。 このコードを追加したところ、数学のソートはすることが出来ました。 ただ、数学が同点だったときの英語のソートが出来ませんでした。 提出の期限なので数学のソートのみで提出しようと思います。 もっと勉強します。
guest

0

Java

1import static java.util.Comparator.*; 2 3import java.util.ArrayList; 4 5public class SortScoreComparable { 6 public static void main(String[] args) { 7 ArrayList<Score> score = new ArrayList<Score>(); 8 9 score.add(new Score("taro", 12, 97)); 10 score.add(new Score("jiro", 42, 54)); 11 score.add(new Score("sabu", 42, 47)); 12 score.add(new Score("siro", 57, 97)); 13 score.add(new Score("goro", 87, 40)); 14 score.add(new Score("roku", 99, 99)); 15 score.add(new Score("nana", 14, 23)); 16 score.add(new Score("hati", 42, 54)); 17 18 System.out.println("ソート前"); 19 score.forEach(s -> System.out.printf("%s : Math : %d : English : %d\n", s.getName(), s.getMath(), s.getEnglish())); 20 21 score.sort(comparing(Score::getMath).thenComparing(Score::getEnglish).reversed()); 22 23 System.out.println("ソート後"); 24 score.forEach(s -> System.out.printf("%s : Math : %d : English : %d\n", s.getName(), s.getMath(), s.getEnglish())); 25 } 26} 27 28class Score { 29 private String name; 30 private int math; 31 private int english; 32 33 public Score(String name, int math, int english) { 34 this.name = name; 35 this.math = math; 36 this.english = english; 37 } 38 39 public String getName() { 40 return name; 41 } 42 43 public int getMath() { 44 return math; 45 } 46 47 public int getEnglish() { 48 return english; 49 } 50}

投稿2017/09/27 07:15

編集2017/09/27 07:43
root_jp

総合スコア4666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問