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();
  }
}

 

자바 콘솔창에서의 결과값