public Subject(String name) {
setName(name);
}
ex) 시험 성적, 키, 몸무게 <- 존재하지 않을 경우 '-1' 넣기
public int getSubjectScore(String name) {
// 원하는 과목 뽑아서 성적 꺼내오기
Subject goal = new Subject(name);
// 성적이 없으면 기본값 -1 (0 ~ 100 존재할 수 있으므로)
int score = -1;
for(Subject temp : scores) {
if(temp.equals(goal)) {
score = temp.getScore();
}
}
return score;
}
int[][] scoresOfStudent = {
{100, 90, 80},
{90, 70, 80},
{60, 60, 90} };
학급 - 학생들
학생 - 학생이름, 과목(성적)들
과목 - 과목이름, 성적
class Subject {
private String name;
private int score;
// 교과목 찾을 때 사용
// '식별자'만 존재하는 생성자 <- 'equals'로 원하는 객체 찾을 때 사용!
// getter를 따로 사용해서 원하는 객체 찾기 코드를 만드는 건 불편하고 재사용도 어려움
// 그러므로 '식별자 객체'를 만들고, 이걸 이용해서 equals 메서드로 찾는다.
public Subject(String name) {
setName(name);
}
public Subject(String name, int score) {
setName(name);
setScore(score);
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
public void setName(String name) {
this.name = name;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return name + " : " + score;
}
// 이름이 같으면 같은 교과목명
@Override
public boolean equals(Object o) {
if(o == null || !(o instanceof Subject)) {
return false;
}
Subject temp = (Subject) o;
return name.equals(temp.getName());
}
}
class Student {
private String name;
private Subject[] scores;
public Student(String name, Subject... scores) {
setName(name);
setScores(scores);
}
public String getName() {
return name;
}
public Subject[] getScores() {
return scores;
}
public void setName(String name) {
this.name = name;
}
public void setScores(Subject... scores) {
this.scores = scores;
}
// 개인별 총점
public int getTotal() {
int total = 0;
for(Subject temp : scores) {
total += temp.getScore();
}
return total;
}
// 개인별 평균
public int getAvg() {
return getTotal() / scores.length;
}
/*
교과목 점수 찾기
parameter : 교과목 이름
return : 점수. (단, 존재하지 않는 교과목인 경우 -1)
점수는 0 ~ 100, '점수가 없다'는? -1 <- (존재할 수 없는) 음수값 사용!
*/
public int getSubjectScore(String name) {
// 원하는 과목 뽑아서 성적 꺼내오기
Subject goal = new Subject(name);
// 성적이 없으면 기본값 -1 (0 ~ 100 존재할 수 있으므로)
int score = -1;
for(Subject temp : scores) {
if(temp.equals(goal)) {
score = temp.getScore();
}
}
return score;
}
@Override
public String toString() {
String info = "<<" + name + ">>\n";
for(Subject temp : scores) {
info += temp.toString() + "\n";
}
info += "총점 : " + getTotal() + "\n";
info += "평균 : " + getAvg();
return info;
}
}
class Klass {
private Student[] list;
public Klass(Student... list) {
setList(list);
}
public Student[] getList() {
return list;
}
public void setList(Student... list) {
this.list = list;
}
// 교과목 총점
public int getTotal(String subjectName) {
int total = 0;
for(Student temp : list) {
int score = temp.getSubjectScore(subjectName);
// score >= 0 : 과목 성적이 없으면 'score = -1'로 처리했으므로, 그 경우는 제외하고 합계 구함
if(score >= 0) {
total += score;
}
}
return total;
}
//교과목 평균
public int getAvg(String subjectName) {
return getTotal(subjectName) / list.length;
}
@Override
public String toString() {
String info = "- 학급정보 -\n";
for(Student temp : list) {
info += temp.toString() + "\n";
}
// 같은 학급이면 시험 과목이 같으므로
Subject[] scores = list[0].getScores();
// 학생의 성적들 쫙 뽑아오기
for(Subject temp : scores) {
String name = temp.getName();
info += name + " 총점 : " + getTotal(name) +"\n";
info += name + " 평균 : " + getAvg(name) + "\n";
}
return info;
}
}
class Answer {
public static void main(String[] args) {
Subject s1 = new Subject("국어", 90);
Subject s2 = new Subject("영어", 70);
Subject s3 = new Subject("수학", 100);
Student st1 = new Student("애봉이", s1, s2, s3);
Student st2 = new Student(
"김수현",
new Subject("국어", 90),
new Subject("영어", 100),
new Subject("수학", 100)
);
Student st3 = new Student(
"김유정",
new Subject("국어", 100),
new Subject("영어", 100),
new Subject("수학", 100)
);
System.out.println(new Klass(st1, st2, st3));
}
}