학번, 이름, 국어점수, 영어점수, 수학점수, 총점, 등수를 멤버로 갖는 Student클래스를 작성한다. 이 클래스의 생성자에서는 학번, 이름, 국어점수, 영어점수, 수학점수만 매개변수로 받아서 초기화 처리한다.
class Student implements Comparable<Student>{
private int num;
private String name;
private int kor;
private int eng;
private int math;
private int score;
private int rank;
public Student(int num, String name, int kor, int eng, int math){
this.num = num;
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
this.score = kor + eng + math;
this.rank = 1;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
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 getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
@Override
public String toString() {
return "Student [num=" + num + ", name=" + name + ", kor=" + kor
+ ", eng=" + eng + ", math=" + math + ", score=" + score
+ ", rank=" + rank + "]";
}
}
이 Student 객체는 List에 저장하여 관리한다.
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
list.add(new Student(1, "홍길동", 50, 30, 80));
list.add(new Student(10, "이순신", 80, 50, 90));
list.add(new Student(3, "변학도", 50, 65, 56));
list.add(new Student(8, "김철수", 80, 75, 42));
list.add(new Student(6, "김영희", 15, 85, 42));
list.add(new Student(5, "강감찬", 58, 56, 55));
list.add(new Student(7, "이세종", 58, 56, 55));
list.add(new Student(4, "이덕재", 59, 95, 56));
list.add(new Student(9, "장희빈", 60, 80, 81));
list.add(new Student(2, "김지희", 89, 88, 95));
}
List에 저장된 데이터들을 학번의 오름차순으로 정렬할 수 있는 내부 정렬 기준을 구현하고,
class Student implements Comparable<Student>{
@Override
public int compareTo(Student stu) {
return Integer.compare(this.num, stu.getNum());
}
}
public static void main(String[] args) {
//학번의 오름차순(내부 정렬 기준)
Collections.sort(list);
System.out.println("학번 오름차순");
for(Student stu : list){
System.out.println(stu);
}
//학번 오름차순
//Student [num=1, name=홍길동, kor=50, eng=30, math=80, score=160, rank=9]
//Student [num=2, name=김지희, kor=89, eng=88, math=95, score=272, rank=1]
//Student [num=3, name=변학도, kor=50, eng=65, math=56, score=171, rank=6]
//Student [num=4, name=이덕재, kor=59, eng=95, math=56, score=210, rank=4]
//Student [num=5, name=강감찬, kor=58, eng=56, math=55, score=169, rank=7]
//Student [num=6, name=김영희, kor=15, eng=85, math=42, score=142, rank=10]
//Student [num=7, name=이세종, kor=58, eng=56, math=55, score=169, rank=7]
//Student [num=8, name=김철수, kor=80, eng=75, math=42, score=197, rank=5]
//Student [num=9, name=장희빈, kor=60, eng=80, math=81, score=221, rank=2]
//Student [num=10, name=이순신, kor=80, eng=50, math=90, score=220, rank=3]
}
총점의 역순(내림차순)으로 정렬하는데 총점이 같으면 이름의 오름차순으로 정렬되는 외부 정렬 기준 클래스를 작성하여 정렬된 결과를 출력하시오.
class scoreDesc implements Comparator<Student> {
@Override
public int compare(Student stu1, Student stu2) {
if(stu1.getScore() > stu2.getScore()){
return -1;
}else if(stu1.getScore() < stu2.getScore()){
return 1;
}else{
if(stu1.getName().compareTo(stu2.getName()) > 0){
return -1;
}else if(stu1.getName().compareTo(stu2.getName()) < 0){
return 1;
}else{
return 0;
}
}
}
}
public static void main(String[] args) {
//총점의 내림차순(외부 정렬 기준 클래스), 총점이 같으면 이름의 오름차순
Collections.sort(list, new scoreDesc());
System.out.println("총점 내림차순...");
for(Student stu : list){
System.out.println(stu);
}
}
//총점 내림차순...
//Student [num=2, name=김지희, kor=89, eng=88, math=95, score=272, rank=1]
//Student [num=9, name=장희빈, kor=60, eng=80, math=81, score=221, rank=2]
//Student [num=10, name=이순신, kor=80, eng=50, math=90, score=220, rank=3]
//Student [num=4, name=이덕재, kor=59, eng=95, math=56, score=210, rank=4]
//Student [num=8, name=김철수, kor=80, eng=75, math=42, score=197, rank=5]
//Student [num=3, name=변학도, kor=50, eng=65, math=56, score=171, rank=6]
//Student [num=5, name=강감찬, kor=58, eng=56, math=55, score=169, rank=7]
//Student [num=7, name=이세종, kor=58, eng=56, math=55, score=169, rank=7]
//Student [num=1, name=홍길동, kor=50, eng=30, math=80, score=160, rank=9]
//Student [num=6, name=김영희, kor=15, eng=85, math=42, score=142, rank=10]
(등수는 List 전체 데이터가 추가된 후에 저장되도록 한다.)
public static void main(String[] args) {
rank(list);
}
private static void rank(ArrayList<Student> list) {
//석차
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
if (list.get(i).getScore() < list.get(j).getScore()) {
int rank = list.get(i).getRank();
rank += 1;
list.get(i).setRank(rank);
}
}
}
}
학번, 이름, 국어점수, 영어점수, 수학점수, 총점, 등수를 멤버로 갖는 Student클래스를 작성한다. 이 클래스의 생성자에서는 학번, 이름, 국어점수, 영어점수, 수학점수만 매개변수로 받아서 초기화 처리한다.
class Student implements Comparable<Student>{
private int num;
private String name;
private int kor;
private int eng;
private int math;
private int score;
private int rank;
public Student(int num, String name, int kor, int eng, int math){
this.num = num;
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
this.score = kor + eng + math;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
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 getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
@Override
public String toString() {
return "Student [num=" + num + ", name=" + name + ", kor=" + kor
+ ", eng=" + eng + ", math=" + math + ", score=" + score
+ ", rank=" + rank + "]";
}
}
이 Student 객체는 List에 저장하여 관리한다.
public static void main(String[] args) {
StudentSam t = new StudentSam();
List<Students> stdList = new ArrayList<>();
stdList.add(new Students(1, "홍길동", 90, 95, 80));
stdList.add(new Students(3, "성춘향", 90, 75, 70));
stdList.add(new Students(7, "강감찬", 95, 95, 80));
stdList.add(new Students(5, "변학도", 80, 95, 90));
stdList.add(new Students(2, "일지매", 100, 85, 80));
stdList.add(new Students(4, "이순신", 60, 65, 70));
stdList.add(new Students(6, "이몽룡", 90, 100, 90));
}
List에 저장된 데이터들을 학번의 오름차순으로 정렬할 수 있는 내부 정렬 기준을 구현하고,
class Student implements Comparable<Student>{
@Override
public int compareTo(Students std) {
return Integer.compare(this.num, std.getNum());
}
}
public static void main(String[] args) {
System.out.println("정렬전...");
for(Students std : stdList){
System.out.println(std);
}
System.out.println("-------------------------------------------------------------------------");
System.out.println();
//학번의 오름차순으로 정렬하기
Collections.sort(stdList);
System.out.println("학번의 오름차순 정렬 후...");
for(Students std : stdList){
System.out.println(std);
}
}
//정렬전...
//Student2 [num=1, name=홍길동, kor=90, eng=95, mat=80, tot=265, rank=3]
//Student2 [num=3, name=성춘향, kor=90, eng=75, mat=70, tot=235, rank=6]
//Student2 [num=7, name=강감찬, kor=95, eng=95, mat=80, tot=270, rank=2]
//Student2 [num=5, name=변학도, kor=80, eng=95, mat=90, tot=265, rank=3]
//Student2 [num=2, name=일지매, kor=100, eng=85, mat=80, tot=265, rank=3]
//Student2 [num=4, name=이순신, kor=60, eng=65, mat=70, tot=195, rank=7]
//Student2 [num=6, name=이몽룡, kor=90, eng=100, mat=90, tot=280, rank=1]
//-------------------------------------------------------------------------
//학번의 오름차순 정렬 후...
//Student2 [num=1, name=홍길동, kor=90, eng=95, mat=80, tot=265, rank=3]
//Student2 [num=2, name=일지매, kor=100, eng=85, mat=80, tot=265, rank=3]
//Student2 [num=3, name=성춘향, kor=90, eng=75, mat=70, tot=235, rank=6]
//Student2 [num=4, name=이순신, kor=60, eng=65, mat=70, tot=195, rank=7]
//Student2 [num=5, name=변학도, kor=80, eng=95, mat=90, tot=265, rank=3]
//Student2 [num=6, name=이몽룡, kor=90, eng=100, mat=90, tot=280, rank=1]
//Student2 [num=7, name=강감찬, kor=95, eng=95, mat=80, tot=270, rank=2]
총점의 역순(내림차순)으로 정렬하는데 총점이 같으면 이름의 오름차순으로 정렬되는 외부 정렬 기준 클래스를 작성하여 정렬된 결과를 출력하시오.
class SortByTotal implements Comparator<Students>{
@Override
public int compare(Students std1, Students std2) {
if(std1.getTot() == std2.getTot()){
return std1.getName().compareTo(std2.getName());
//String 클래스는 내부 정렬 기준이 구현되어 있다.(default 오름차순)
}else{
return Integer.compare(std1.getTot(), std2.getTot()) * -1;
}
}
}
public static void main(String[] args) {
// 총점의 역순으로 정렬하기
Collections.sort(stdList, new SortByTotal());
System.out.println("총점의 역순으로 정렬 후....");
for(Students std : stdList){
System.out.println(std);
}
}
//총점의 역순으로 정렬 후....
//Student2 [num=6, name=이몽룡, kor=90, eng=100, mat=90, tot=280, rank=1]
//Student2 [num=7, name=강감찬, kor=95, eng=95, mat=80, tot=270, rank=2]
//Student2 [num=5, name=변학도, kor=80, eng=95, mat=90, tot=265, rank=3]
//Student2 [num=2, name=일지매, kor=100, eng=85, mat=80, tot=265, rank=3]
//Student2 [num=1, name=홍길동, kor=90, eng=95, mat=80, tot=265, rank=3]
//Student2 [num=3, name=성춘향, kor=90, eng=75, mat=70, tot=235, rank=6]
//Student2 [num=4, name=이순신, kor=60, eng=65, mat=70, tot=195, rank=7]
(등수는 List 전체 데이터가 추가된 후에 저장되도록 한다.)
//등수를 구하는 메서드
public void setRanking(List<Students> stdList){
//for(int i = 0; i < stdList.size(); i++){ //기준 데이터를 구하기위한 반복문
// int rank = 1; //처음에는 1등으로 설정해 놓고 시작한다.
// for(int j = 0; j < stdList.size(); j++){ //비교 대상을 나타내는 반복문
// //기준보다 큰 값을 만나면 rank값을 증가시킨다.
// if(stdList.get(i).getTot() < stdList.get(j).getTot()){
// rank++;
// }
// } //for - j
// //구해진 등수를 Student 객체의 rank변수에 저장한다.
// stdList.get(i).setRank(rank);
//
// } //for - i
for(Students std1 : stdList){ //기준 대상
int rank = 1;
for(Students std2 : stdList){ //비교 대상
if(std1.getTot() < std2.getTot()){
rank++;
}
}
std1.setRank(rank);
}
}