Java
[JAVA] 시험 결과를 출력하고, 점수에 따라 등수를 차등으로 출력하는 문제
나루나른
2024. 3. 21. 18:05
해당 문제에 대한 출력 예시)
====================================
번호 이름 1 2 3 4 5 점수 등수
------------------------------------
1 홍길동 O X O O O 80 2
2 무궁화 O O O O O 100 1
3 라일락 X X X X O 20 5
4 진달래 X O X O O 60 3
5 봉선화 O O X X X 40 4
------------------------------------
- 맞은문제 O, 틀린문제 X표시
- 점수: O당 20점씩
- 등수: 점수를 기준으로 높은사람이 1등
문제) 출력 결과에 해당하는 각각의 5명에 대한 성적을 구하고 점수별로 등수를 메긴다.
//Jumsu의 객체 배열 student를 생성하고 초기화한다.
//Jumsu 객체는 학생의 번호, 이름, 그리고 5개 문제에 대한 답안을 포함함
Jumsu[] student = {
new Jumsu(1,"홍길동", 3,4,3,3,3),
new Jumsu(2,"무궁화", 3,3,3,3,3),
new Jumsu(3,"라일락", 1,2,4,4,3),
new Jumsu(4,"진달래", 2,3,1,3,3),
new Jumsu(5,"봉선화", 3,3,4,1,1)
};
//학생 수를 계산 : student 배열의 길이를 size 변수에 저장함(학생 수를 나타냄)
int size = student.length;
// 점수 계산 : 모든 학생의 compute() 메서드를 순회하며 호출하여, 각 학생의 점수를 계산함
// 학생의 답안과 정답을 비교하여 점수를 계산하고, 'O'와 'X'를 ox 배열에 저장
for (int i = 0; i < size; i++) {
student[i].compute();
}
// 등수 계산 : 각 학생에 대해, 다른 모든 학생의 점수와 비교합니다.
// 만약 다른 학생의 점수가 더 높다면, 현재 학생의 등수를 1 증가시킴
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
if (student[i].score < student[j].score) {
student[i].rank++; // 다른 학생의 점수가 더 높으면 등수를 1 증가
}
}
}
// 결과 출력
System.out.println("** 시험 결과 **");
System.out.println("====================================");
System.out.println("번호 이름 1 2 3 4 5 점수 등수");
System.out.println("------------------------------------");
//각 학생의 disp() 메서드를 호출하여 번호, 이름, 각 문제에 대한 'O'/'X' 표시, 점수, 등수를 출력
for (int i = 0; i < size; i++) {
student[i].disp();
}
System.out.println("------------------------------------");
}
Jumsu를 정의하고 있는 클래스
class Jumsu {
//멤버 변수 field
//Jumsu 클래스를 정의하고 있으며, 학생의 시험 점수를 처리하는 데
//필요한 속성(멤버 변수)과 메서드(멤버 함수)를 포함하고 있음
private int no; //번호
private String name; //이름
private char[] ox = new char[5]; //OX표시
private int[] answer = new int[5];//답안지 제출
public int score; //점수
public int rank; //등수
//생성자 함수 constructor
public Jumsu() {//기본 생성자(default), 초기에는 아무런 동작도 하지 않음
}
//오버로딩된 생성자, 학생의 번호, 이름, 그리고 5개의 문제에 대한 답안을 초기화한다.
//모든 학생의 초기 등수는 1로 설정
public Jumsu(int no, String name, int a0, int a1, int a2, int a3, int a4) {
this.no = no;
this.name = name;
//각 5개 문제에 대한 답안을 초기화함.
this.answer[0] = a0;
this.answer[1] = a1;
this.answer[2] = a2;
this.answer[3] = a3;
this.answer[4] = a4;
this.rank = 1; //모든 학생의 초기 등수는 1로 설정
}
//멤버함수 method
//학생의 답안을 정답과 비교하여 'O' 또는 'X'로 ox 배열을 채우고
//맞은 문제의 수를 기반으로 점수를 계산한다. 각 맞은 문제에 20점을 부여함
public void compute() {
int[] dap = {3,3,3,3,3}; //정답
int correctCount = 0; //맞은 수
// 정답과 학생의 답안 비교
for (int i = 0; i < dap.length; i++) {
if (answer[i] == dap[i]) { //answer[i] == dap[i]의 값이 일치한다면
ox[i] = 'O'; //ox[i]에 O를 대입
correctCount++;//O가 대입되면 correnctCount의 값을 1씩 증가시킴
} else {
ox[i] = 'X'; //아닐경우는 X를 대입함
}
score = correctCount * 20; //증가한 correctCount 값 * 20을 score(점수) 변수에 저장
}
}
//학생의 번호, 이름, 각 문제의 'O'/'X' 표시, 점수, 등수를 출력
public void disp() {
System.out.print(no+" "); //학생의 번호
System.out.print(name+" ");//학생의 이름
//for (char c : ox) { ... }: 이 구문은 ox 배열의 시작부터 끝까지 각 요소를 순회함
for(char c : ox) {
System.out.print(c + " ");//순회중인 char값인 c를 출력하고 뒤에 공백을 추가
}
System.out.print(score+" ");
System.out.print(rank+" ");
System.out.println();
}
}