[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
*/