[Java]/과제
084 - Java 과제 7 : 배열을 사용하여 입력할 점수 데이터 값의 수와, 학생들의 점수를 입력받고, 점수의 총합, 평균, 학생 각각의 편차를 출력하는 프로그램
Jelly-fish
2023. 9. 5. 16:57
package Test084;
/*==========================
■■■ 배열 ■■■
- 배열의 선언과 초기화
- 배열의 기본적 활용
============================*/
// ○ 과제
// 사용자로부터 임의의 학생 수를 입력받고
// 그만큼의 점수(정수 형태)를 입력받아
// 전체 학생 점수의 합, 평균, 편차를 구해서
// 결과를 출력하는 프로그램을 구현한다.
// 실행 예)
// 학생 수 입력 : 5
// 1번 학생의 점수 입력 : 90
// 2번 학생의 점수 입력 : 82
// 3번 학생의 점수 입력 : 64
// 4번 학생의 점수 입력 : 36
// 5번 학생의 점수 입력 : 98
// >> 합 : 370
// >> 평균 : 74.0
// >> 편차
// 90 : -16
// 82 : -8.0
// 64 : 10.0
// 36 : 38.0
// 98 : -24.0
// 계속하려면 아무 키나 누르세요...
import java.util.Scanner;
public class Test084
{
public static void main(String[] args)
{
// 1. 변수 선언*****************************************************************************
Scanner sc = new Scanner(System.in);
int studentCount; // -->> 학생의 수를 사용자에게 입력받아 4byte 정수형으로 저장하는 변수
int[] scoresArr; // -->> 학생의 점수를 입력받아서 요소로 저장하는 정수형 배열
int sum = 0; // -->> 모든 학생들의 점수들을 더하여 총점을 4byte 정수형으로 저장하는 변수
double average = 0; // -->> 모든 학생들의 평균을 구한 값을 저장하는 4byte 정수형 변수
// 2. 사용자로부터 학생의 수를 입력받기**********************************************************
System.out.print("학생의 수 입력 : ");
studentCount = sc.nextInt();
// 3. 입력받은 학생의 수만큼 scoresArr 배열의 길이를 설정.*****************************************
scoresArr = new int[studentCount];
// 4. studentCount 횟수만큼 사용자로부터 학생의 점수들을 반복하여 입력받고, 배열의 요소로 저장하기.********
/* [Logic]▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤
*
* ① 사용자로부터 입력 받은 학생의 수 값 studentCount 값으로
* 학생들의 점수 값을 담는 정수형 배열 scoresArr[]의 길이를 설정한다.
*
* ② ┌[i = 0 ~ (studentCount - 1) 까지 다음을 반복]──────────────────────────┐
* │
* │ _____________________________________________________
* │ ⓐ 배열 scoresArr[]의 0번 방부터 ~ (studentCount - 1) 번 방까지
* │ 사용자가 입력한 정수 형태의 『 점수 』 값을 저장.
* │  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
* │ _____________________________________________________
* │ ⓑ sum에 scoresArr[i]를 더하여 점수의 총점을 구함.
* │  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
* └──────────────────────────────────────────────────────────┘
*
* ③ for문을 돌며 구한 총점값 sum을 통해 average 값을 연산하여 저장
* ◎ 「실수 나눗셈」 → 『 average(double형 변수) = sum / (double) studentCount; 』
*
*
* ④ -⑴ 결과 출력 : 학생들의 점수 총합 sum, 점수의 평균 average(소수점 아래 한 자리)
*
* ⑤ -⑵ 결과 출력
*
* ┌[i = 0 ~ (studentCount - 1) 까지 다음을 반복]──────────────────────────────┐
* │
* │ __________________________________________________________
* │ ⓐ [ 학생들의 점수 : 편차 ]를 출력.
* │
* │ scoresArr[i] : average - scoresArr[i]
* │  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
* │ ▶ 『 평균 - i 번째 학생의 점수 = 편차 출력. 』
* │  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
* └──────────────────────────────────────────────────────────────┘
* ▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤
*/
// i = 0 ~ (studentCount - 1)까지 반복하는 과정에서,
// scoresArr 배열에 사용자에게 입력받은 각각의 점수를 요소로 저장함과 동시에
// 0으로 초기화된 정수형 sum 변수에 scoresArr[i] 값을 누적해가며 더하여 점수의 총합을 구한다.
for (int i = 0 ; i < studentCount ; i++)
{
System.out.printf("%d번 학생의 점수 입력 : ", i+1);
scoresArr[i] = sc.nextInt();
sum += scoresArr[i];
}
// 5. 구한 점수의 총합 값으로 평균을 구해, 8byte 실수형 double 변수 average에 저장한다.***************
average = sum / (double)studentCount;
// 6. 현재까지 구한 점수의 총합 값 sum과, 평균 값 average를 출력한다.*******************************
System.out.printf(">> 합 : %6d\n", sum);
System.out.printf(">> 평균 : %6.1f\n", average);
// 7. 출력 과정에서 학생 각각의 편차를 구하여 출력한다.*********************************************
// ┌────────────────────────────────────────────────────────────────┐
// │ ◎ 편차: 평균과 실제 점수의 차이
// │ → 『 평균값 - 받은 점수값 』
// │
// │ 학생들의 점수가 지금 배열의 방마다 하나씩 저장되어 있기 때문에
// │
// │ for문을 써서, 각각의 학생들의 편차를 출력해 보도록 하자.
// └────────────────────────────────────────────────────────────────┘
//
/*
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
>> 합 : 370
>> 평균 : 74.0
>> 편차
90 : -16
82 : -8.0
64 : 10.0
36 : 38.0
98 : -24.0
계속하려면 아무 키나 누르세요...
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
*/
for (int i = 0; i < scoresArr.length ; i++)
{
System.out.printf(" %-5d: %6.1f\n", scoresArr[i], (average - scoresArr[i])); // ▶ (평균 - i 번째 학생의 점수 = 편차 출력.)
}
}
}
// 실행 결과
/*
학생의 수 입력 : 5
1번 학생의 점수 입력 : 90
2번 학생의 점수 입력 : 82
3번 학생의 점수 입력 : 64
4번 학생의 점수 입력 : 36
5번 학생의 점수 입력 : 98
>> 합 : 370
>> 평균 : 74.0
>> 편차
90 : -16.0
82 : -8.0
64 : 10.0
36 : 38.0
98 : -24.0
*/
/*
학생의 수 입력 : 4
1번 학생의 점수 입력 : 90
2번 학생의 점수 입력 : 50
3번 학생의 점수 입력 : 60
4번 학생의 점수 입력 : 80
>> 합 : 280
>> 평균 : 70.0
>> 편차
90 : -20.0
50 : 20.0
60 : 10.0
80 : -10.0
*/