オブジェクト並び替え

Java

クラス->インスタンスの流れを練習しながらオブジェクトをソートしてみよう。

[Step1]
Studentクラスを以下のように作成する。
フィールド
int id(登録順につけられるid)
String name(名前)
int score(テストの点数)

コンストラクタ
3つのフィールドにセットできるコンストラクタを作成する。

メソッド
以下のように名前…テストの点数といったフォーマットでインスタンスの情報を出力するvoid showInfo()メソッドを作成する。
Suzuki … 66点

[Step2]
アプリケーションクラスStudentAppを作成し以下のようにStudent配列を作成して表示する処理を作成する。

[実行例]

生徒は何人>3
1人目の名前>Suzuki
1人目の点数>53
2人目の名前>Tanaka
2人目の点数>79
3人目の名前>Yamada
3人目の点数>48
Suzuki    ... 53点
Tanaka    ... 79点
Yamada    ... 48点

[Step3]
上で作成したオブジェクト配列を並び替えるメソッドをStudentAppクラスに作成せよ。
public static void sortStudents(Student[] data,String key)

第二引数には”id”または”score”という文字列が渡されることを想定し、idが渡された場合には
id昇順に,scoreが渡された場合は点数降順にStudent配列を並び替えるものとする。

[Step4]
Step3で作ったメソッド使って以下の処理を実現する。

 
生徒は何人>3
1人目の名前>Suzuki
1人目の点数>58
2人目の名前>Tanaka
2人目の点数>78
3人目の名前>Yamada
3人目の点数>44
操作を入力:1...登録順に一覧,2...点数降順に一覧,3...終了>1
Suzuki    ... 58点
Tanaka    ... 78点
Yamada    ... 44点
操作を入力:1...登録順に一覧,2...点数降順に一覧,3...終了>2
Tanaka    ... 78点
Suzuki    ... 58点
Yamada    ... 44点
操作を入力:1...登録順に一覧,2...点数降順に一覧,3...終了>1
Suzuki    ... 58点
Tanaka    ... 78点
Yamada    ... 44点
操作を入力:1...登録順に一覧,2...点数降順に一覧,3...終了>3
アプリケーションを終了します
package typinggame;
import java.util.*;
public class StudentApp {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.print("生徒は何人>");
		int num=sc.nextInt();
		Student[] students=new Student[num];
		for(int i=0;i<num;i++){
			System.out.printf("%d人目の名前>", i+1);
			String name=sc.next();	
			System.out.printf("%d人目の点数>",i+1);
			int score=sc.nextInt();
			students[i]=new Student(i+1,name,score);		
		}
		
		while(true){
			System.out.printf("操作を入力:1...登録順に一覧,2...点数降順に一覧,3...終了>");
			int select=sc.nextInt();
			if(select==3){
				System.out.println("アプリケーションを終了します");
				return;
			}
			sortStudents(students,select==1? "id":"score");
			for(Student s:students){
				s.showInfo();
			}
		}
	}
	public static void sortStudents(Student[] data,String key){
		for(int i=0;i<data.length-1;i++){
			for(int j=i+1;j<data.length;j++){
				if(key.equals("id") && data[i].id>data[j].id
					||key.equals("score") && data[i].score<data[j].score
				){
					Student temp=data[i];
					data[i]=data[j];
					data[j]=temp;
				}
			}
		}
	}
}
class Student{
 int id;
 String name;
 int score;
 Student(int id,String name,int score){
	 this.id=id;
	 this.name=name;
	 this.score=score;
 }
 void showInfo(){
	 System.out.printf("%-10s...%3d点%n",this.name,this.score);
 }
}
Java
スポンサーリンク
シェアする
mjpurinをフォローする
ジョイタスネット

コメント

タイトルとURLをコピーしました