반응형
객체를 생성하여 문제풀기
학원 문제풀이는 메인메소드에서 student 배열 객체를 for문을 이용해 간단하게 작성하는 풀이로 진행 됐다.
오늘까지 학원에서 배운것들을 다 사용해 보고싶어서 학원 풀이법 말고 다른 풀이법으로 코드작성을 해 보았다.
public class Test04_ox {
public static void main(String[] args) {
// 문제) 성적프로그램 OX 표시하기
// Jumsu 클래스 생성 후 실행
/*
** 시험결과 **
======================================
번호 이름 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등
*/
Jumsu[] student = {
new Jumsu(1, "홍길동", 3, 4, 3, 3, 3),
new Jumsu(3, "무궁화", 3, 3, 3, 3, 3),
new Jumsu(4, "라일락", 1, 2, 4, 4, 3),
new Jumsu(2, "진달래", 2, 3, 1, 3, 3),
new Jumsu(5, "봉선화", 3, 3, 4, 1, 1)
};
System.out.println(" ** 시험결과 **");
System.out.println("======================================");
System.out.println("번호 이름 1 2 3 4 5 점수 등수");
System.out.println("--------------------------------------");
new Jumsu().makeRank(student);
System.out.println("--------------------------------------");
}
}
public class Jumsu {
//멤버 변수 field
private int stuNo; //번호
private String stuName; //이름
private int[] answer = new int[5]; //답안지 제출
private char[] ox = new char[5]; //OX표시
public int score; //점수
public int rankNum; //등수
//생성자
public Jumsu() {}
public Jumsu(int stuNo, String stuName, int a0, int a1, int a2, int a3, int a4) {
this.stuNo = stuNo;
this.stuName = stuName;
this.answer[0] = a0;
this.answer[1] = a1;
this.answer[2] = a2;
this.answer[3] = a3;
this.answer[4] = a4;
}
//메소드
public void compute(Jumsu[] a) { // 채점 메소드
//문제 정답 번호
int[] dap = {3, 3, 3, 3, 3};
//채점
for(int j=0; j<a.length; j++) {
for (int i = 0; i < dap.length; i++) {
if (dap[i] == a[j].answer[i]) {
a[j].ox[i] = 'O';
a[j].score += 20; //정답이면 20점 추가
} else {
a[j].ox[i] = 'X';
}
}
}
}
public void disp(Jumsu a) { // 출력 메소드
System.out.print(" " + a.stuNo + " ");
System.out.print(a.stuName + " ");
System.out.print(a.ox[0] + " ");
System.out.print(a.ox[1] + " ");
System.out.print(a.ox[2] + " ");
System.out.print(a.ox[3] + " ");
System.out.print(a.ox[4] + " ");
System.out.print(a.score + " ");
System.out.print(a.rankNum + " ");
System.out.println();
}
public void makeRank(Jumsu[] a) {
compute(a); // 채점 메소드 사용
for (int i=0; i<a.length-1; i++) { // 등수대로 정렬하기 : score 값으로 객체 배열 내림차순 정렬
for(int j=i+1; j<a.length; j++) {
if (a[i].score < a[j].score) {
Jumsu b = a[i];
a[i] = a[j];
a[j] = b;
}
}
}
for(int i=0; i<a.length; i++) { // 등수 적용 : 정렬된 객체 배열의 인덱스번호+1 을 해당객체 rankNum에 넣음
a[i].rankNum = i+1;
}
for (int i=0; i<a.length-1; i++) { // score 값으로 정렬된 객체 배열을 stuNo로 재정렬
for(int j=i+1; j<a.length; j++) {
if (a[i].stuNo > a[j].stuNo) {
Jumsu b = a[i];
a[i] = a[j];
a[j] = b;
}
}
}
for(int i=0; i<a.length; i++) { // 출력 메소드 이용하여 전체 출력
disp(a[i]);
}
}
}
반응형
'Back-End > Java' 카테고리의 다른 글
Java 복습, 예습 (0) | 2023.03.19 |
---|---|
Java(5) (0) | 2023.03.17 |
Java 예제(2) (0) | 2023.03.16 |
댓글