Everything has an expiration date
★ 101 - Java 클래스와 인스턴스의 활용 : Record 클래스(속성)의 배열을 선언하고, Sungjuk 클래스(기능)에서 연산을 처리한 후, Test101의 메인 메소드에서 구동시키는 프로그램 (내 풀이) 본문
[Java]/review
★ 101 - Java 클래스와 인스턴스의 활용 : Record 클래스(속성)의 배열을 선언하고, Sungjuk 클래스(기능)에서 연산을 처리한 후, Test101의 메인 메소드에서 구동시키는 프로그램 (내 풀이)
Jelly-fish 2023. 9. 9. 17:18MyRecord.java - 속성 값들만을 담는 클래스
package Review101;
//이름, 학생별로 국어점수, 영어점수, 수학점수를 입력받아
//총점, 평균을 계산하는 프로그램을 구현한다.
//단, 클래스의 개념을 활용하여 작성할 수 있도록 한다.
//또한, 이 과정에서 배열을 적극적으로 활용할 수 있도록 한다.
//클래스 설계는 다음의 가이드라인에 따라 진행할 수 있도록 한다.
//1. Record 클래스 → 학생 1명
//- 속성만 존재하는 클래스로 설계할 것~!!!
public class MyRecord
{
String name;
int kor;
int eng;
int mat;
int tot;
double avg;
int rank;
}
MySungjuk.java - 연산 처리, 기능, 동작을 처리하는 클래스
package Review101;
//이름, 학생별로 국어점수, 영어점수, 수학점수를 입력받아
//총점, 평균을 계산하는 프로그램을 구현한다.
//단, 클래스의 개념을 활용하여 작성할 수 있도록 한다.
//또한, 이 과정에서 배열을 적극적으로 활용할 수 있도록 한다.
//클래스 설계는 다음의 가이드라인에 따라 진행할 수 있도록 한다.
//2. Sungjuk 클래스
//- 인원 수를 입력받아.
//입력받은 인원 수 만큼 이름, 국어점수, 영어점수, 수학점수를 입력받고
//총점과 평균을 산출하는 클래스로 설계할 것~!!!
//* 속성 : 인원 수 , Record 타입의 배열 (학생들)
//* 기능 : 인원수 입력, 상세 데이터 입력, 총점 및 평균 연산, 결과 출력
//3. Test101
//- main() 메소드가 존재하는 외부 클래스로 설계할 것~!!!
//실행 예)
//인원 수 입력(1~100) : 102
//인원 수 입력(1~100) : -10
//인원 수 입력(1~100) : 3
//1번째 학생의 이름 입력 : 강혜성
//국어 점수 : 90
//영어 점수 : 80
//수학 점수 : 70
//2번째 학생의 이름 입력 : 길현욱
//국어 점수 : 92
//영어 점수 : 82
//수학 점수 : 72
//3번째 학생의 이름 입력 : 김경태
//국어 점수 : 82
//영어 점수 : 72
//수학 점수 : 62
//길현욱 92 82 72 xxx xx.xx 1
//강혜성 90 80 70 240 xx.xx 2
//김경태 82 72 62 xxx xx.xx 3
//계속하려면 아무 키나 누르세요...
import java.util.Scanner;
public class MySungjuk
{
private int countPeople;
MyRecord[] student;
// 1. 인원수를 입력 받는 메소드(입력값 1 ~ 100 일 때까지)
public void input()
{
Scanner sc = new Scanner(System.in);
do
{
System.out.print("인원 수 입력(1~100) : ");
countPeople = sc.nextInt();
}
while(countPeople < 1 || countPeople > 100);
// MyRecord 클래스의 배열 MyRecord[] student의 배열 길이를 countPeople 값으로 지정.
student = new MyRecord[countPeople];
}
// 2. 인원수 만큼 반복 하면서, 학생들의 이름과 국, 영, 수 점수 입력 받기
// 3. 학생들의 총점과 평균 구하기
public void inputDataProcess()
{
Scanner sc = new Scanner(System.in);
for(int i = 0; i < student.length; i++)
{
student[i] = new MyRecord(); //-->> ★ Record 타입 배열의 i번째 방마다 인스턴스를 생성해 주는 구문.
System.out.printf("\n%d번째 학생 이름 입력 : ", i+1);
student[i].name = sc.next();
System.out.print("\n국어 점수 입력 : ");
student[i].kor = sc.nextInt();
student[i].tot += student[i].kor; //-->> 입력과 동시에 총합 값에 더해준다.
System.out.print("영어 점수 입력 : ");
student[i].eng = sc.nextInt();
student[i].tot += student[i].eng; //-->> 입력과 동시에 총합 값에 더해준다.
System.out.print("수학 점수 입력 : ");
student[i].mat = sc.nextInt();
student[i].tot += student[i].mat; //-->> 입력과 동시에 총합 값에 더해준다.
student[i].avg = student[i].tot / (double)countPeople; //-->> 총합 값을 이용해, 평균 값도 구해준다.
}
}
// 4. 결과 출력하기
//길현욱 92 82 72 xxx xx.xx 1
//강혜성 90 80 70 240 xx.xx 2
//김경태 82 72 62 xxx xx.xx 3
//계속하려면 아무 키나 누르세요...
public void write()
{
for (int i = 0; i < student.length ; i++)
{
System.out.printf("\n%-5s", student[i].name);
System.out.printf("%4d", student[i].kor);
System.out.printf("%4d", student[i].eng);
System.out.printf("%4d", student[i].mat);
System.out.printf("%4d", student[i].tot);
System.out.printf("%8.2f", student[i].avg);
System.out.printf("%4d", student[i].rank);
}
}
// 5. 번외 : 학생들의 석차 구하여 출력하기.
public void rank()
{
for(int i = 0; i < student.length; i++)
{
student[i].rank = 1; //--> 모든 student의 랭크 값 1로 초기화.
}
for(int i = 0; i < (student.length - 1); i++)
{
for(int j = i+1; j < student.length; j++)
{
if (student[i].avg > student[j].avg) //--> 평균값이 낮은 학생 j의 랭크 + 1
{
student[j].rank++;
}
else if (student[i].avg < student[j].avg) //--> 평균값이 낮은 학생 i의 랭크 + 1
{
student[i].rank++;
}
}
}
}
}
Review101.java - main() 메소드를 통해 MySungjuk의 인스턴스 생성 후, 실행 시키는 클래스
package Review101;
/*======================================
■■■ 클래스와 인스턴스 ■■■
- 클래스와 인스턴스의 활용
=======================================*/
//이름, 학생별로 국어점수, 영어점수, 수학점수를 입력받아
//총점, 평균을 계산하는 프로그램을 구현한다.
//단, 클래스의 개념을 활용하여 작성할 수 있도록 한다.
//또한, 이 과정에서 배열을 적극적으로 활용할 수 있도록 한다.
//클래스 설계는 다음의 가이드라인에 따라 진행할 수 있도록 한다.
//[가이드라인]
//프로그램을 구성하는 클래스
//1. Record 클래스 → 학생 1명
//- 속성만 존재하는 클래스로 설계할 것~!!!
//2. Sungjuk 클래스
//- 인원 수를 입력받아.
//입력받은 인원 수 만큼 이름, 국어점수, 영어점수, 수학점수를 입력받고
//총점과 평균을 산출하는 클래스로 설계할 것~!!!
//* 속성 : 인원 수 , Record 타입의 배열 (학생들)
//* 기능 : 인원수 입력, 상세 데이터 입력, 총점 및 평균 연산, 결과 출력
//3. Test101
//- main() 메소드가 존재하는 외부 클래스로 설계할 것~!!!
//실행 예)
//인원 수 입력(1~100) : 102
//인원 수 입력(1~100) : -10
//인원 수 입력(1~100) : 3
//1번째 학생의 이름 입력 : 강혜성
//국어 점수 : 90
//영어 점수 : 80
//수학 점수 : 70
//2번째 학생의 이름 입력 : 길현욱
//국어 점수 : 92
//영어 점수 : 82
//수학 점수 : 72
//3번째 학생의 이름 입력 : 김경태
//국어 점수 : 82
//영어 점수 : 72
//수학 점수 : 62
//길현욱 92 82 72 xxx xx.xx 1
//강혜성 90 80 70 240 xx.xx 2
//김경태 82 72 62 xxx xx.xx 3
//계속하려면 아무 키나 누르세요...
public class Review101
{
public static void main(String[] args)
{
MySungjuk msj = new MySungjuk(); // 인스턴스 생성.
msj.input();
msj.inputDataProcess();
msj.rank();
msj.write();
}
}
//실행 결과
/*
인원 수 입력(1~100) : 3
1번째 학생 이름 입력 : 뫄뫄
국어 점수 입력 : 100
영어 점수 입력 : 97
수학 점수 입력 : 98
2번째 학생 이름 입력 : 봐봐
국어 점수 입력 : 80
영어 점수 입력 : 50
수학 점수 입력 : 49
3번째 학생 이름 입력 : 좌좌
국어 점수 입력 : 65
영어 점수 입력 : 70
수학 점수 입력 : 50
뫄뫄 100 97 98 295 98.33 1
봐봐 80 50 49 179 59.67 3
좌좌 65 70 50 185 61.67 2
*/