❓
****문제 :
* 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 문자열.멤버변수);
}
'수업 문제(국비 지원) > Java' 카테고리의 다른 글
| [JAVA] 2022.09.16 - IO입출력 (0) | 2023.04.29 |
|---|---|
| [JAVA] 2022.09.15 - Collection 함수 (0) | 2023.04.29 |
| [JAVA] 2022.09.13 - DataClass 달력만들기 (0) | 2023.04.29 |
| [JAVA] 2022.09.09 - StringClass (0) | 2023.04.29 |
| [JAVA] 2022.09.07 - 내부 클래스 (0) | 2023.04.29 |