본문 바로가기
문제를 풀어보자

JAVA) 자바의 정석 기초편 11-3 연습 문제(Comparable 정렬)

by 휴일이 2022. 10. 13.

 

11-3)

다음에 제시된 Student 클래스가

Comparable 인터페이스를 구현하도록 변경해서

이름(name)이 기본 정렬 기준이 되도록 하시오

 

 

 

답)

 

package exercise11_3;

import java.util.*;

class Student implements Comparable<Student> { //Comparable<타입> 필수ㅠㅠ이거땜에 고생함
    String name;
    int ban;
    int no;
    int kor, eng, math;

    Student(String name, int ban,int no,int kor,int eng,int math) {
        this.name = name;
        this.ban = ban;
        this.no = no;
        this.kor = kor;
        this.eng = eng;
        this.math = math;
    }

    int getTotal() {
        return kor+eng+math;
    }

    float getAverage() {
        return (int)((getTotal()/3f)*10+0.5)/10f;
    }
    @Override
    public String toString() {
        return name+","+ban+","+no+","+kor+","+eng+","+math+","+getTotal()+","+getAverage();
    }

    @Override //Comparable의 메소드 오버라이딩 해줘야 함
    public int compareTo(Student s) { //객체 자신과 s를 비교함
        return this.name.compareTo(s.name); //기본정렬은 내객체.compareTo(매개변수객체) //역순은 반대로 하면 됨
    }
}

public class Ex11_3 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(new Student("홍길동",1,1,100,100,100));
        list.add(new Student("남궁성",1,2,90,70,80));
        list.add(new Student("김자바",1,3,80,80,90));
        list.add(new Student("이자바",1,4,70,90,70));
        list.add(new Student("안자바",1,5,60,100,80));



        Collections.sort(list);
        Iterator it = list.iterator();


        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

 

 

결과

 

가나다 순으로 기본 정렬 완료

 

return s.name.compareTo(this.name) //니꺼-내꺼

이렇게 하면 역순으로 나온당

728x90