고급 JAVA
JavaCollectionFramework - List Sort 예제 - 학생 관리 프로그램
햄찌개
2020. 9. 15. 18:55
* 문제 ) 학번, 이름, 국어점수, 영어점수, 수학점수, 총점, 등수를 멤버로 갖는
* Student 클래스를 만든다.
* 생성자는 학번, 이름, 국어, 영어, 수학 점수만 매개변수를 받아서 처리한다.
*
* 이 Student 객체들은 List에 저장하여 관리한다.
* List에 저장한 데이터들을 학번의 오름차순으로 정렬하여 출력하는 부분과
* 총점의 역순으로 정렬하는 부분을 프로그램 하시오.
* (총점이 같으면 학번의 내림차순으로 정렬되도록 한다.)
* (학번 정렬 기준은 Student클래스 자체에서 제공하도록 하고,
* 총점 정렬기준은 외부클래스에서 제공하도록 한다.)
package kr.or.ddid.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class T04_StudentTest {
public static void main(String[] args) {
List<Student> List = new ArrayList<>();
List.add(new Student("1560050", "전진원",100,100,100));
List.add(new Student("1560049", "박찬", 100, 100, 100));
List.add(new Student("1560005", "김성준", 40, 75, 85));
List.add(new Student("1560023", "김선준", 30, 22, 56));
List.add(new Student("1560001", "홍길동", 35, 75, 90));
System.out.println("정렬전");
for(Student student : List) {
System.out.println(student);
}
System.out.println("=============================================================");
Collections.sort(List);// 정렬
System.out.println("학번 오름차순 정렬 후 : ");
for(Student student : List) {
System.out.println(student.toString());
}
System.out.println("=========================================================");
Collections.sort(List, new StudentTotal() );//정렬
System.out.println("총점의 역순 정렬 : ");
int a = 1;
for(Student student : List) {
int b = List.get(a-1).total;
for (int i = 0; i <List.size() ; i++) {
if(b< List.get(i).total) {
int c =student.getGrade();
student.setGrade(c+1);
}
}a++;
System.out.println(student.toString());
}
System.out.println("==========================================================");
}
}
class StudentTotal implements Comparator<Student>{
@Override
public int compare(Student st1, Student st2) {
if(new Integer(st1.getTotal()).compareTo(st2.getTotal()) ==0) { //총점이 같으면 학번 순
return new String(st1.getHak()).compareTo(st2.getHak()) -1;
}else {
return new Integer(st1.getTotal()).compareTo(st2.getTotal())*-1 ; //총점 내림차순
}
}
}
class Student implements Comparable<Student>{
String hak;
String name;
int kor;
int eng;
int math;
int total;
int grade =1;
@Override
public String toString() {
return "Student [hak=" + hak + ", name=" + name + ", kor=" + kor + ", eng=" + eng + ", math=" + math
+ ", total=" + total + ", grade=" + grade + "]";
}
public Student(String hak, String name, int kor, int eng, int math) {
super();
this.hak = hak;
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
total = kor+eng+math;
}
@Override
public int compareTo(Student st1) {
return hak.compareTo(st1.getHak());
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getHak() {
return hak;
}
public void setHak(String hak) {
this.hak = hak;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
}