==========================[GradeComparableMain.java]========================
import java.util.*;
public class GradeComparableMain {
public static void main(String[] args) {
Grade[] g= new Grade[7];
g[0] = new Grade(60,60,70);
g[1] = new Grade(89,65,67);
g[2] = new Grade(60,80,100);
g[3] = new Grade(70,99,80);
g[4] = new Grade(60,70,80);
g[5] = new Grade(60,80,80);
g[6] = new Grade(73,70,80);
Grade [] g2=GradeBubbleSort.bubble(g);
System.out.println("입력순 출력==============");
prints(g2);
}
public static void prints(Grade[ ] v){
int num=v.length;
for(int i=0;i<num;i++){
System.out.println(v[i]);
}//for
System.out.println();
}//prints
}
-------------------------------------------------------------------------------------------
참조 타입은 배열을 정의할 때 초기화되지 않는다. 그러므로 객체를 생성할 때 반드시 초기화해야 한다.
static 타입이면서 Grade 타입 배열을 버블정렬 하는 bubble() 메서드를 호출한다.
bubble을 void로 선언했다면 GradeBubbleSort.bubble(g);로 바꾸어 prints(g)로 출력하면 된다.
===========================================================================================
Comparable의 compareTo(Object obj) 메서드는 객체의 순서를 정렬하는 방법이다.
Comparable을 구현한다면 compareTo(Object obj)를 구현해야 한다.
/* 학생 성적 비교하기 예제 */
================================[Grade.java]==================================
public class Grade implements Comparable{
private double kor;
private double eng;
private double math;
private double total;
private double mean;
public Grade(){ this(0,0,0); } // ↓에 의해 객체 생성시 초기화
public Grade(double kor,double eng,double math){
this.kor=kor; this.eng=eng; this.math=math;
getMean();
}
public String toString (){
return (kor+"/"+eng+"/"+math+"/"+total+"/"+mean);
}
public double getEng() { return eng; }
public double getKor() { return kor; }
public double getMath(){ return math; }
public double getMean() {
mean=getTotal()/3.0;
return mean;
}
public double getTotal() {
total=(this.kor+this.eng+this.math);
return total;
}
public void setEng(double d) { eng = d; getMean();}
public void setKor(double d) { kor = d; getMean();}
public void setMath(double d){ math = d; getMean();}
//Comparable의 구현해야 할 메서드
public int compareTo(Object o1){
Grade g2=(Grade)o1;
double mean1=this.mean; // g1 안에서 평균값은 this.mean이다.
double mean2=g2.getMean();
// g1 안에서 평균값과 g2의 평균을 비교하려고 g2.getMean()으로 g2의 평균값을 구한다.
if(mean1>mean2){
return -1; //decreasing
}else if(mean1==mean2){
return 0;
}else {
return 1; //increasing
}
}
}
-----------------------------------------------------------------------------------------
두 성적(Grade)의 높고 낮음을 판단하려고 Comparable 인터페이스의 compareTo 메서드를 사용한다.
g1.compareTo(g2)를 써서 두 점수를 비교한다. g1.compareTo(g2)는 g1 안에서 g2를 비교한다.
Grade 타입인 g1안에서 외부에 있는 g2를 비교하므로 g1의 멤버를 사용할 수 있고,
g2는 getMean 메서드를 사용한다. 성적을 비교하려고 Grade로 캐스팅한다.
===========================================================================================
============================[GradeBubbleSort.java]============================
/* 거품 정렬 */
public class GradeBubbleSort
{
public static Grade[ ] bubble(Grade [] a){
int n=a.length;
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1-i;j++){
if(a[j].compareTo(a[j+1])>0){
Grade temp=a[j+1]; //스왑
a[j+1]=a[j];
a[j]=temp;
}
}
}
return a;
}
}
==============================================================================
'IT_Programming > Java' 카테고리의 다른 글
Java 관련 사이트 (0) | 2007.08.23 |
---|---|
Collection 클래스 (0) | 2007.07.05 |
인터페이스 Comparator를 이용한 순서 정렬하기 (Array.sort) (0) | 2007.07.05 |
자바 컬렉션 프레임워크 [JCF] (0) | 2007.07.02 |
클론을 이용한 참조 타입의 복사본 만들기 (0) | 2007.06.29 |