다연이네

[문제] 열거형 활용 예제 본문

Java

[문제] 열거형 활용 예제

 다연  2020. 10. 23. 22:47
반응형

[문제] 학생 데이터를 학번, 이름, 성적 기준으로 오름차순으로 정렬하라

package days24;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;

public class Ex09 {

	public static void main(String[] args) {

		ArrayList<Student2> list =new ArrayList<Student2>(30); //30명

		list.add(new Student2(1, "문소민", 90, 89, 78, 257, 85.66, 2));
		list.add(new Student2(2, "함치영", 80, 89, 78, 247, 82.66, 3));
		list.add(new Student2(3, "성태석", 90, 99, 78, 267, 88.66, 1));



		//1을 집어넣으면 tot로 정렬
		//2을 집어넣으면 name으로 정렬
		//3을 집어넣으면 no로 정렬
		//list.sort(new StudentComparator(3)); //주석 없으면 무슨 코딩인지 모른다 
        		//3의의미? 코드 분석하지 않는이상 모름 => 표준화를 위해 enum을 사용
		list.sort(new StudentComparator(StudentSortOption.SCORE)); 
        //열거형 쓰니 NAME을 주겠다는 것을 명확히 알 수 있다
		//i와 열겨형 자료형 => 가독성이 완전히 다름

		System.out.println("> 모든 학생 정보 출력 <");
		Iterator<Student2> ir = list.iterator();
		while (ir.hasNext()) {
			Student2 s =  ir.next();
			System.out.println(s);
		}


	}//

}//

//열거형 선언
enum StudentSortOption{SCORE, NAME, NO}


class StudentComparator implements Comparator<Student2>{
	int i; //지역변수 생성하고 2
	public StudentComparator(int i) { //i는 지역변수 
		this.i =i; // 여기서 i받은거 지역변수로 넘겨주기 ***** 3
	}

	private StudentSortOption sortOption; //지역변수 i처럼 밖에 선언해주기
	public StudentComparator(StudentSortOption sortOption) {
		this.sortOption =sortOption;
	}

	@Override
	public int compare(Student2 o1, Student2 o2) { //이 메소드에서도 i를 사용하고싶다면 1
		/*	if(i==1) { 
			return Integer.compare(o1.getTot(),o2.getTot());
		}else if(i==2) {
			return o1.getName().compareTo(o2.getName());
            //문자열끼리 비교=> 문자열.compareTo 같으면0 다르면 양수 음수
		}else //if(i==3)
		{
			return Integer.compare(o1.getNo(),o2.getNo());
		}
		 */
         
         //열거형 사용시
		switch (this.sortOption) {
		case NAME:
			return o1.getName().compareTo(o2.getName());
		case SCORE:
			return Integer.compare(o1.getTot(),o2.getTot());
		case NO:
			return Integer.compare(o1.getNo(),o2.getNo());
		default: return Integer.compare(o1.getNo(),o2.getNo());

		}

	}

}

class Student2 implements Comparable<Student2>{ //<Student2> 주면 학생들끼리 비교하겠다는 뜻
	// fields
	private int no;
	private String name;
	private int  kor, eng, mat;
	private int tot;
	private double avg;
	private int rank;

	// constructors
	public Student2() {
		super(); 
	}

	public Student2(int no, String name, int kor, int eng, int mat, int tot, double avg, int rank) {
		super();
		this.no = no;
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
		this.tot = tot;
		this.avg = avg;
		this.rank = rank;
	}

	// getter , setter
	public int getNo() {
		return no;
	}

	public void setNo(int no) {
		this.no = no;
	}

	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 getMat() {
		return mat;
	}

	public void setMat(int mat) {
		this.mat = mat;
	}

	public int getTot() {
		return tot;
	}

	public void setTot(int tot) {
		this.tot = tot;
	}

	public double getAvg() {
		return avg;
	}

	public void setAvg(double avg) {
		this.avg = avg;
	}

	public int getRank() {
		return rank;
	}

	public void setRank(int rank) {
		this.rank = rank;
	}

	@Override
	public String toString() {
		return String.format(
				"[%d] %s\t%d\t%d\t%d\t%d\t%.2f\t%d",
				no, name, kor, eng,mat,tot, avg, rank );
	}


	@Override
	public int compareTo(Student2 o) { //제네릭을 사용하는 이유 : Object가 아니라 Student2로 됨
		return Integer.compare(this.no, o.no);
	} 

} 
반응형

'Java' 카테고리의 다른 글

[days24] 자바 입출력(I/O) 이론 개념  (0) 2020.10.23
[days24] Annotation  (0) 2020.10.23
[days24] 열거형(enums)  (0) 2020.10.23
[days24] Generics  (0) 2020.10.23
[days23] 컬렉션 클래스 - Properties  (0) 2020.10.21
Comments