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

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

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

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

Q&A

解決済

2回答

4398閲覧

java ソートで順位付けするプログラムを作りたい

ikanosasimi

総合スコア32

Java

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

0グッド

0クリップ

投稿2017/12/28 02:09

標準入力で
[15 20 35]
[30 45 72]
[15 20 31]
[27 33 59]
[27 35 77]
と与えられて、
[30 45 72]
[27 35 77]
[27 33 59]
[15 20 35]
[15 20 31]
と返す様に

1列目の降順ソートをし、1列目内で数値が同等のものを2列目の大小で決定、それでも決まらなかった場合3列目の大小で表示順を決めるプログラムを作りたいです
どういう方法があるのでしょうか?

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

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

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

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

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

fuzzball

2017/12/28 02:30

「1列目の降順ソート」のコードは書けるのでしょうか?
guest

回答2

0

ベストアンサー

リストにしてComparator#thenComparing(...)などを使用するのが簡単そうです。

java

1import java.util.Arrays; 2import java.util.List; 3import java.util.Comparator; 4public class SortTest { 5 public static void main(String[] args) { 6 List<List<Integer>> list = Arrays.asList( 7 Arrays.asList(15, 20, 35), 8 Arrays.asList(30, 45, 72), 9 Arrays.asList(15, 20, 31), 10 Arrays.asList(27, 33, 59), 11 Arrays.asList(27, 35, 77)); 12 list.sort(Comparator.<List<Integer>>comparingInt(l -> l.get(0)) 13 .thenComparingInt(l -> l.get(1)) 14 .thenComparingInt(l -> l.get(2)) 15 .reversed()); 16 System.out.println(list); 17 // [[30, 45, 72], [27, 35, 77], [27, 33, 59], [15, 20, 35], [15, 20, 31]] 18 } 19} 20// Java 1.8 以前 21// list.sort(new ListIntegerComparator()); 22// Collections.reverse(list); 23class IntegerListComparator implements Comparator<List<Integer>> { 24 @Override public int compare(List<Integer> a, List<Integer> b) { 25 Integer i = a.get(1) - b.get(1); 26 if (i == 0) { 27 i = a.get(2) - b.get(2); 28 } 29 if (i == 0) { 30 i = a.get(3) - b.get(3); 31 } 32 return i; 33 } 34}

投稿2017/12/28 05:55

編集2017/12/28 11:30
aterai

総合スコア158

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

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

ikanosasimi

2017/12/28 09:41

これは凄いですね ありがとうございます! 出来たらでよろしいのですが、ラムダ式がない場合はどういうロジックで並び替えればよいのでしょうか?
aterai

2017/12/28 11:31

ラムダ式がない場合=Java 1.8以前と解釈してコードを追記しました。
ikanosasimi

2017/12/28 11:34

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

0

java

1Comparator<int[]> comparator = new Comparator<>(){ 2 @Override 3 public int compare(int[] a, int[] b) { 4 for (int i = 0; i < 3; i++) { 5 if (a[i] != b[i]) return b[i] - a[i]; 6 } 7 return 0; 8 } 9} 10Arrays.sort(array, comparator);

投稿2017/12/28 12:01

swordone

総合スコア20675

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

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

ikanosasimi

2017/12/29 14:48

回答ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問