クラス->インスタンスの流れを練習しながらオブジェクトをソートしてみよう。
[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);
}
}
コメント