본문 바로가기

대학교 과제/Java [ 2 - 1 ]

[Java 과제] - 12주차 ( Arrays.sort() )

반응형

1. 과제 안내문, 예시 출력 화면


다음과 같이 가격의 오름차순으로 도서가 정렬되도록 Book 클래스를 작성하라.

예시 출력 화면


 다행이 JFrame과 관련된 과제는 아니지만, 중요한 개념을 다루는 과제라고 생각한다. Class를 구현하는 부분과 compareTo 함수 오버라이딩부분이 이 과제의 가장 중요한 부분이라고 생각한다. 다음은 코드의 구성이다.

 

2. 코드 구성

 

main역할을 하는 Class는 이미 주어졌으므로 지금은 Book Class를 집중적으로 설명하고자 한다. 일단 sort() 매소드에 설명하자면 인자값으로 받는 리스트의 구성 요소들을 오름차순으로 정렬해주는 매소드이다. 그러나 우리가 흔히 아는 기본형 즉, 정수, 실수, 문자를 요소로 가지는 리스트들은 가능하지만 나는 내가 정의한 Class를 요소로 가지는 배열을 만들었기에, compareTo함수를 오버라이딩하는 작업을 해야한다. 정리하자면 다음과 같다.

 


배열의 요소가 리터럴이 아닌 Class일 때, 이 배열을 정리하려면 comparable 인터페이스를 구현하고, compareTo 메소드를 구성해야한다.


 자 다음은 책의 가격순으로 정렬될 수 있도록 구성한 Book Class이다.

 

public class Book implements Comparable{

	String name;
	int price;
	
	public Book(String name, int price) {
		this.name = name;
		this.price = price;
	}
	@Override
	public int compareTo(Object o) {
		if(o != null && o instanceof Book) {
			Book b = (Book) o;
			if(this.price > b.price)
				return 1;
			else if(this.price < b.price)
				return -1;
			else 
				return 0;
		}
		else
			return -1;
	}
	
	public String toString() {
		return "제목  = " + name + ", 가격 = " + price; 
	}
}

 

 코드에서 볼 수 있듯이, compareTo매소드를 오버라이딩 했다. 그리고 자신의 price와 매개변수로 들어온 객체의 price를 비교해 주는 기능을 한다. 다음은 이 과제의 전체 코드이다.

 

public class Book implements Comparable{

	String name;
	int price;
	
	public Book(String name, int price) {
		this.name = name;
		this.price = price;
	}
	@Override
	public int compareTo(Object o) {
		if(o != null && o instanceof Book) {
			Book b = (Book) o;
			if(this.price > b.price)
				return 1;
			else if(this.price < b.price)
				return -1;
			else 
				return 0;
		}
		else
			return -1;
	}
	
	public String toString() {
		return "제목  = " + name + ", 가격 = " + price; 
	}
}

import java.util.Arrays;

public class BookSort{

	public static void main(String[] args) {
		
		Book[] list = new Book[4];
		list[0] = new Book("자바 프로그래밍", 28000);
		list[1] = new Book("인류의 대항해", 21600);
		list[2] = new Book("장사란 무엇인가", 12000);
		list[3] = new Book("상처받지 않는 영혼", 24000);
		
		Arrays.sort(list);
		for(Book b:list)
			System.out.println(b);
	}
}

 

3. 결어

 

 놀랍게도 1일 뒤에 13주차 과제를 제출해야한다...... 제발 밀리지 않기를 바란다 ㅠㅠ

반응형

'대학교 과제 > Java [ 2 - 1 ]' 카테고리의 다른 글

[Java 과제] - 11주차  (0) 2020.06.02
Java 10주차 과제 - 상속  (0) 2020.05.13
Java 9주차 과제 - JFrame, ActionListener  (0) 2020.05.04