[1]. 최종 과제 내용
[1-1] 완성된 코드
package homework;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Homework1 {
public static void main(String[] args) {
// 학생 정보
List<Student> student = new ArrayList<Student>();
student.add(new Student("1", "홍길동", 80, 90, 90));
student.add(new Student("2", "이순신", 84, 93, 85
));
student.add(new Student("3", "일지매", 88, 97, 90));
student.add(new Student("4", "변학도", 98, 92, 94));
student.add(new Student("5", "춘향이", 100, 100, 100));
// 총점과 평균
for (Student std : student) { //학생 리스트인 Student를 반복하여 각 학생 점보를 std 변수에 순차적으로 향상하는 변수입
int kor = std.getKor();
int math = std.getMath();
int eng = std.getEng();
int sum = kor + math + eng;
double avg = sum / 3.0;
std.setSum(sum); //std의 합계 필드에 계산된 합계 sum을 설정한다.
std.setAvg(avg); //std의 합계 필드에 계산된 평균 sum을 설정한다
}
// 등수
Collections.sort(student, new sumDesc());
int i = 1; // 동점자 x
int j = i; // 동점자 o
int temp = 0; // 이전 학생의 총점 총검같으면 같은등수
for (Student std : student) {
if(temp == std.getSum()) { //이전 학생의 총점과 현재 학생의 총점이 같으면 동일한 등수 부여
std.setRank(j);
i++;
}else { //총점이 다르면 등수 갱신후 j를 초기화하고 증가
std.setRank(i);
j = i++;
}
temp = std.getSum();
}
// 리스트 섞기
System.out.println("정렬 전: ");
Collections.shuffle(student); //셔플 해주는 함수
for (Student std : student) { //student 리스트에 있는 각 학생 std을 가져와서
System.out.println(std); //system을 통해 해당 학생 객체의 toString() 메서드 호출을 하여 출력합니다.
}
System.out.println("");
// 학번 오름차순
Collections.sort(student);
System.out.println("학번의 오름차순 정렬 후: ");
for (Student std : student) {
System.out.println(std);
}
System.out.println("");
// 총점의 역순으로 정렬, 총점이 같으면 학번의 내림차순으로 정렬
System.out.println("총점, 학번의 내림차순 정렬 후: ");
Collections.sort(student, new sumDesc());
for (Student std : student) {
System.out.println(std);
}
}
}
class sumDesc implements Comparator<Student>{
// 총점 정렬기준은 외부클래스에서 제공
@Override
public int compare(Student std1, Student std2) {
if(std1.getSum() > std2.getSum()) { //std1의 총점이 크면 std1이 std2보다 앞에 위치하도록 -1 반환
return -1;
}else if(std1.getSum() == std2.getSum()) { // 총점이 같으면 학번을 기준으로 내림차순으로 정렬
// 총점이 같을 경우 학번의 내림차순으로 정렬
return std1.compareTo(std2)*(-1); // compareTo 메서드는 학번을 기준으로 정렬하는데 , 여기에 -1을 곱해 내림차순으로 변경
}else { // std2의 총점이 크면은 std2가 std1보다 앞에 위치하도록 1 반환
return 1;
}
}
}
// 학번 정렬기준은 Student클래스 자체에서 제공
class Student implements Comparable<Student>{
String no;
String name;
int kor;
int math;
int eng;
int sum;
double avg;
int rank;
public Student(String no, String name, int kor, int math, int eng) {
super();
this.no = no;
this.name = name;
this.kor = kor;
this.math = math;
this.eng = eng;
}
@Override
public String toString() {
return "Student [no=" + no + ", name=" + name + ", kor=" + kor + ", math=" + math + ", eng=" + eng + ", sum="
+ sum + ", avg=" + avg + ", rank=" + rank + "]";
}
public String getNo() {
return no;
}
public void setNo(String 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 getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
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 int compareTo(Student std) {
return this.getNo().compareTo(std.getNo());
}
}
[2]. 학생 정보 입력
package homework;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Homework1 {
public static void main(String[] args) {
// 학생 정보
List<Student> student = new ArrayList<Student>();
student.add(new Student("1", "홍길동", 80, 90, 90));
student.add(new Student("2", "이순신", 84, 93, 85
));
student.add(new Student("3", "일지매", 88, 97, 90));
student.add(new Student("4", "변학도", 98, 92, 94));
student.add(new Student("5", "춘향이", 100, 100, 100));
[3] 총점 과 평균
for (Student std : student) { //학생 리스트인 Student를 반복하여 각 학생 점보를 std 변수에 순차적으로 향상하는 변수입
int kor = std.getKor();
int math = std.getMath();
int eng = std.getEng();
int sum = kor + math + eng;
double avg = sum / 3.0;
std.setSum(sum); //std의 합계 필드에 계산된 합계 sum을 설정한다.
std.setAvg(avg); //std의 합계 필드에 계산된 평균 sum을 설정한다
}
[4] 등수
// 등수
Collections.sort(student, new sumDesc());
int i = 1; // 동점자 x
int j = i; // 동점자 o
int temp = 0; // 이전 학생의 총점 총검같으면 같은등수
for (Student std : student) {
if(temp == std.getSum()) { //이전 학생의 총점과 현재 학생의 총점이 같으면 동일한 등수 부여
std.setRank(j);
i++;
}else { //총점이 다르면 등수 갱신후 j를 초기화하고 증가
std.setRank(i);
j = i++;
}
temp = std.getSum();
}
[5] 리스트 섞기
// 리스트 섞기
System.out.println("정렬 전: ");
Collections.shuffle(student); //셔플 해주는 함수
for (Student std : student) { //student 리스트에 있는 각 학생 std을 가져와서
System.out.println(std); //system을 통해 해당 학생 객체의 toString() 메서드 호출을 하여 출력합니다.
}
System.out.println("");
[6] 학번 오름차순
// 학번 오름차순
Collections.sort(student);
System.out.println("학번의 오름차순 정렬 후: ");
for (Student std : student) {
System.out.println(std);
}
System.out.println("");
[7] 총점의 역순으로 정렬 , 총점이 같으면
// 총점의 역순으로 정렬, 총점이 같으면 학번의 내림차순으로 정렬
System.out.println("총점, 학번의 내림차순 정렬 후: ");
Collections.sort(student, new sumDesc());
for (Student std : student) {
System.out.println(std);
}
[8]. 총점 정렬 기준은 외부 클래스 [내림차순 정렬]
class sumDesc implements Comparator<Student>{
// 총점 정렬기준은 외부클래스에서 제공
@Override
public int compare(Student std1, Student std2) {
if(std1.getSum() > std2.getSum()) { //std1의 총점이 크면 std1이 std2보다 앞에 위치하도록 -1 반환
return -1;
}else if(std1.getSum() == std2.getSum()) { // 총점이 같으면 학번을 기준으로 내림차순으로 정렬
// 총점이 같을 경우 학번의 내림차순으로 정렬
return std1.compareTo(std2)*(-1); // compareTo 메서드는 학번을 기준으로 정렬하는데 , 여기에 -1을 곱해 내림차순으로 변경
}else { // std2의 총점이 크면은 std2가 std1보다 앞에 위치하도록 1 반환
return 1;
}
}
}
[9] Getter Setter
// 학번 정렬기준은 Student클래스 자체에서 제공
class Student implements Comparable<Student>{
String no;
String name;
int kor;
int math;
int eng;
int sum;
double avg;
int rank;
public Student(String no, String name, int kor, int math, int eng) {
super();
this.no = no;
this.name = name;
this.kor = kor;
this.math = math;
this.eng = eng;
}
@Override
public String toString() {
return "Student [no=" + no + ", name=" + name + ", kor=" + kor + ", math=" + math + ", eng=" + eng + ", sum="
+ sum + ", avg=" + avg + ", rank=" + rank + "]";
}
public String getNo() {
return no;
}
public void setNo(String 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 getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
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 int compareTo(Student std) {
return this.getNo().compareTo(std.getNo());
}
}