본문 바로가기
수업 문제(국비 지원)/Java

[JAVA] 2022.09.14 - Collection 클래스

by byeolsub 2023. 4. 29.

❓ 

 ****문제 : 
 * Student 클래스 구현하기 
 * 1. 멤버 변수 : 학번(studno),이름(name),전공(major)
 * 2. 멤버메서드: 학생 정보를 출력하도록 toString 오버라이딩 하기
 * 3. 학번과 이름이 같은 경우 같은 학생으로 인식하도록하기.
 *    => 학번과 이름이 같은 경우 중복된 학생으로 인식
 * 4. 구동클래스에 맞도록 생성자 구현.   
package chap12;

import java.util.HashSet;
import java.util.Set;

class Student {
	String studno;
	String name;
	String major;
	Student(String studno,String name, String major) {
		this.studno = studno;
		this.name = name;
		this.major = major;
	}
	public String toString() {
		return "학번(" + studno + "),이름(" + name + "),전공(" + major+")";
	}
	@Override
	public int hashCode() {
		return name.hashCode() + studno.hashCode();
	}

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof Student) {
			Student s = (Student) obj;
			return name.equals(s.name) && studno == s.studno;
		}
		return false;
	}
}

public class Exam2 {
	public static void main(String[] args) {
		Set<Student> set = new HashSet<>();
		set.add(new Student("1234","홍길동","경영"));
		set.add(new Student("2345","홍길순","경영"));
		set.add(new Student("2345","홍길순","컴공")); //X
		set.add(new Student("1234","홍길동","통계")); //X
		set.add(new Student("4567","홍길동","경영"));
		System.out.println("등록 학생 수:" + set.size()); //3
		System.out.println("등록학생:");
		for(Student s : set) System.out.println(s); //3명 출력
	}
}

문제 : 
1.  Student2 클래스 구현하기
    멤버변수 : 이름,국어점수, 영어점수, 수학점수
    멤버메서드 
         String toString() : 각멤버변수값,총점,평균 출력
         int getTotal() : 점수의 합 리턴
         int compareTo() : 이름의 오름차순으로 정렬되도록 구현
2. 구동 클래스 완성하기
    다음 결과가 나오도록 구동 클래스 구현하기    
    
[결과]
기본정렬방식
김삿갓:국어(95),영어(85),수학(75),총점(255),평균(85.00)
이몽룡:국어(80),영어(95),수학(95),총점(270),평균(90.00)
임꺽정:국어(60),영어(75),수학(100),총점(235),평균(78.33)
홍길동:국어(90),영어(80),수학(70),총점(240),평균(80.00)
총점기준 내림차순 정렬
이몽룡:국어(80),영어(95),수학(95),총점(270),평균(90.00)
김삿갓:국어(95),영어(85),수학(75),총점(255),평균(85.00)
홍길동:국어(90),영어(80),수학(70),총점(240),평균(80.00)
임꺽정:국어(60),영어(75),수학(100),총점(235),평균(78.33)
국어 점수내림차순 정렬
김삿갓:국어(95),영어(85),수학(75),총점(255),평균(85.00)
홍길동:국어(90),영어(80),수학(70),총점(240),평균(80.00)
이몽룡:국어(80),영어(95),수학(95),총점(270),평균(90.00)
임꺽정:국어(60),영어(75),수학(100),총점(235),평균(78.33)
영어 점수내림차순 정렬
이몽룡:국어(80),영어(95),수학(95),총점(270),평균(90.00)
김삿갓:국어(95),영어(85),수학(75),총점(255),평균(85.00)
홍길동:국어(90),영어(80),수학(70),총점(240),평균(80.00)
임꺽정:국어(60),영어(75),수학(100),총점(235),평균(78.33)
수학 점수내림차순 정렬
임꺽정:국어(60),영어(75),수학(100),총점(235),평균(78.33)
이몽룡:국어(80),영어(95),수학(95),총점(270),평균(90.00)
김삿갓:국어(95),영어(85),수학(75),총점(255),평균(85.00)
홍길동:국어(90),영어(80),수학(70),총점(240),평균(80.00)
package chap13;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
      
class Student2 implements Comparable<Student2> {
	String name; //이름
	int lang; //국어점수
	int eng;	//영어점수
	int math; //수학점수
	
	Student2(String name, int lang, int eng, int math) {
		this.name =name;
		this.lang = lang;
		this.eng = eng;
		this.math = math;
	}
	
	int getTotal() {
		return lang+eng+math;
	}
	
	public String toString() {
		return String.format("%s:국어(%2d),영어(%2d),수학(%2d),총점(%2d),평균(%.2f)",
				name,lang,eng,math,getTotal(),(getTotal()/3.0));
	}

	@Override
	public int compareTo(Student2 s) {
		return name.compareTo(s.name);
	}
}

public class Test1 {

	public static void main(String[] args) {
		List<Student2> list = new ArrayList<Student2>();
		list.add(new Student2("홍길동", 90, 80, 70));
		list.add(new Student2("김삿갓", 95, 85, 75));
		list.add(new Student2("이몽룡", 80, 95, 95));
		list.add(new Student2("임꺽정", 60, 75, 100));

		System.out.println("기본정렬방식");
		Collections.sort(list);
		for(Student2 s : list) System.out.println(s);

		System.out.println("총점기준 내림차순 정렬");
		Collections.sort
		(list,(s1,s2)->(int)(s2.getTotal()-s1.getTotal()));
		for(Student2 s : list) System.out.println(s);

		System.out.println("국어 점수내림차순 정렬");
		Collections.sort
		(list,(s1,s2)->(int)(s2.lang-s1.lang));
		for(Student2 s : list) System.out.println(s);

		System.out.println("영어 점수내림차순 정렬");
		Collections.sort(list,(s1,s2)->s2.eng - s1.eng);
		for(Student2 s : list) System.out.println(s);

		System.out.println("수학 점수내림차순 정렬");
		Collections.sort(list,(s1,s2)->s2.math - s1.math);
		for(Student2 s : list) System.out.println(s);

	}
}

 


 💡 Stringformat(”형식화 문자열”,파라미터)

         표현식 ”%.2f”(소수점두자리까지) 실수형일때 파라미터값도 getTotal()/3.0실수형으로 맞춰주어야한다.


💡 compareTo 사용법 익혀두기.


📌 s.compareTo("abc") : 정렬에서 사용되는 메소드

           //결과 음수 : s 문자열이 abc 문자열 보다 앞쪽

          //결과 양수 : s 문자열이 AAA 문자열 보다 뒤쪽

 

@Override
	public int compareTo(Student2 s) {
		return name.compareTo(s.name);
	}
@Override
	public int compareTo(클래스명 s) {
		return 멤버변수.compareTo(s 문자열.멤버변수);
	}