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

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

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

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

Q&A

解決済

2回答

2248閲覧

表を年齢が上にいくほど大きくなるように並べ替えるプログラムを作りたい。

Suits

総合スコア0

Java

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

0グッド

0クリップ

投稿2020/06/07 13:43

編集2020/06/15 02:20

前提・実現したいこと

javaでStudentsの表を生年月日の小さい順(年上の人ほど上になるよう)に並べ替えるプログラムを作りたいのですが、どう書けばよいのかがよく分かりません。
並び変えるためのプログラムの部分が出来ていません。
実行すると以下のように表示されるプログラムを組みたいです。

該当のソースコード

class Report{
public static void main(String[] args){
String[][] students={
{"Name","Year","Month","Day"},
};
int i,j;
int miny = Integer.parseInt(students[1][2]);
int minm = Integer.parseInt(students[1][3]);
int mind = Integer.parseInt(students[1][4]);
int mini = 1;
int year,month,day;
for(i=2; i<senbatsu.length; i++){
year = Integer.parseInt(students[i][2]);
month = Integer.parseInt(students[i][3]);
day = Integer.parseInt(students[i][4]);
if( year <= miny ){
miny = year;
mini = i;
}
if( miny == year && month<= minm ){
minm = month;
mini = i;
}
if( miny == year && month == minm && day <= mind){
mind = day;
mini = i;
}
}

試したこと

生年月日が最も早い人を表示するための条件文を作成しました。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/06/07 14:20

昇順ができるなら降順もできるはずですが・・・ 入れ替えが逆になるだけなので
Suits

2020/06/07 14:57

すみません。私が間違えていました。試したことの欄に書いたのは、最も生年月日が早い(年上の人)を表示する時に用いた条件文が使えると思ったので、持ってきたというだけです。 ご指摘ありがとうございました。修正させて頂きました。
退会済みユーザー

退会済みユーザー

2020/06/07 15:44

何も難しいことではないのだが 1.ソートの方法をかえる 条件に一致したら「上」に移動 ← → 条件に一致したら「下」に移動 2.出力順を変える 上から出力  ← → 下から出力 等等
YT0014

2020/06/07 16:54

javaでの並べ替えに関して、検索されることをお勧めします。
guest

回答2

0

自己解決

回答が遅れて申し訳ありません。
if文をそれぞれ分けて、出力するようにしたら解決しました。
ご回答くださいました皆様ありがとうございました。

投稿2020/06/10 05:57

Suits

総合スコア0

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

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

0

配列からリストを作り、ソート結果を配列に戻せばいいでしょう。
比較処理で、誕生日の文字列を int にするよりも、リストを作る時に
int にしておけば、ソートが高速になるでしょう。

Java

1import java.util.*; 2 3class Report { 4 public static void main(String[] args){ 5 String[][] students = { 6 {"Name","Year","Month","Day"}, 7 {"Sashihara Rino","1992","11","21"}, 8 {"Kashiwagi Yuki","1991","7","15"}, 9 {"Watanabe Mayu","1994","3","26"}, 10 {"Takahashi Minami","1991","4","8"}, 11 {"Matsui Jurina","1997","3","8"}, 12 {"Yamamoto Sayaka","1993","7","14"}, 13 {"Miyawaki Sakura","1998","3","19"}, 14 {"Miyazawa Sae","1990","8","13"}, 15 {"Shimazaki Haruka","1994","3","30"}, 16 {"Yokoyama Yui","1992","12","8"}, 17 {"Kitahara Rie","1991","6","24"}, 18 {"Watanabe Miyuki","1993","9","19"}, 19 {"Matsumura Kaori","1990","1","17"}, 20 {"Takayanagi Akane","1991","11","29"}, 21 {"Shibata Aya","1993","4","1"}, 22 {"Muto Tomu","1994","11","25"} 23 }; 24 class Birth { 25 int date; 26 String[] student; 27 Birth(String[] student) { 28 this.student = student; 29 date = Integer.valueOf(student[1]) << 9 | 30 Integer.valueOf(student[2]) << 5 | 31 Integer.valueOf(student[3]); 32 } 33 } 34 List<Birth> lb = new ArrayList<>(); 35 for (int i = 1; i < students.length; i++) 36 lb.add(new Birth(students[i])); 37 38 lb.sort(new Comparator<Birth>() { 39 public int compare(Birth a, Birth b) { return a.date - b.date; } 40 }); 41 42 for (int i = 1; i < students.length; i++) 43 students[i] = lb.get(i-1).student; 44 45 for (String[] s : students) 46 System.out.printf("%-16s %s %2s %2s\n", s[0], s[1], s[2], s[3]); 47 } 48}

コンパイル出来て動いたからといって解決ではありません。
理解できない場合は、どこが分からないのかを質問してください。
また、これが最適解とは限りません。他のやり方も調べてみてください。

投稿2020/06/08 04:23

kazuma-s

総合スコア8224

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問