코드 그라데이션

Day13. Quiz01. 성적 출력 프로그램 나름의 해석 본문

Java/Mega-Method

Day13. Quiz01. 성적 출력 프로그램 나름의 해석

완벽한 장면 2023. 3. 31. 09:50

소스코

package Day13;

import java.util.Scanner;

public class Q1 {

	static int[] input() { 
		Scanner sc = new Scanner(System.in);
		int[] score = new int[3];
		System.out.print("국어 : ");
		score[0]= sc.nextInt();

		System.out.print("영어 : ");
		score[1] = sc.nextInt();

		System.out.print("수학 : ");
		score[2] = sc.nextInt();
		
		return score;
	}
	
	static double avgOP(int[] score) {
		return (score[0]+score[1]+score[2])/3.0; // 평균값 
	}
	
	static String gradeOP(double avg) {
		String hak = "";
		if(avg>=95){
			hak = "A+";
		}
		else if(avg>=90){
			hak = "A";
		}
		else if(avg>= 85) {
			hak = "B+";
		}
		else if(avg>=80) {
			hak = "B";
		}
		else if(avg>=75) {
			hak = "C+";
		}
		else if(avg>=70) {
			hak = "C";
		}
		else if(avg>=65) {
			hak = "D";
		}
		else {
			hak = "F";
		}
		return hak;

	}
	
	static void checkRun(int[] score) {
		if(score[0]>=0&&score[0]<=100&&score[1]>=0&&score[1]<=100&&
				score[2]>=0&&score[2]<=100) {
			double avg = avgOP(score);
			hakJumPrint(avg,gradeOP(avg));
		}
		else {
			wrongPrint();
		}
	}
	
	static void wrongPrint() {
		System.out.println("잘못된 입력입니다.");
	}
	
	static void hakJumPrint(double avg, String hak) {
		System.out.printf("평균 점수는 %.1f, 학점은 %s 입니다.",avg,hak);
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		checkRun(input());
	}

}

 

--------------

나름의 해석

Day12 3번 문제와 거의 비슷한 유형

 

(1)

input()은 리턴값 o, 파라미터 x인 메소드

국어, 영어, 수학, 즉, 세 개 과목의 점수를 받으므로 배열을 선언하여 값을 입력받고, 그 배열을 리턴

 

(2) 

평균 계산 메소드 avgOP();

이것도 리턴값 o, 파라미터 o 인 메서드,

점수를 받은 배열 자체를 파라미터로 받고, 그 결과값 자체(평균 계산한 값)를 변수에 따로 저장하지 않고 바로 리턴해줌.

 

(3) 학점 출력 메소드 gradeOP()

이것은 파라미터o, 리턴값 o 메소드

학점 자체를 hak이라는 문자열을 선언하여 if/else if문으로 분기하고, 값을 집어넣어서 문자열 hak 자체를 리턴

 

(4) 평균과 학점 확인하는 메소드 checkRun()

이것은 파라미터 o, 리턴값 x인 메소드

사실상 main문에서 실행 핵심이 되는 역할,

평균을 계산하는 조건을 대입하고, 평균을 계산.

 

위에서 avgOP는 평균 계산하는 메서드였고, 평균 계산 점수 파라미터로 score(배열)을 받았으므로, 

double avg = avgOP(score) 로 계산.

(6)에서 추가

평균이랑 학점까지 출력해야 하므로, hakjumPrint에 파라미터로 평균과 학점(gradeOP) 집어넣음.

여기서 평균은 위에서 계산한 avg이고, 학점은 평균을 파라미터로 받아서 계산하므로, gradeOP(avg) 이렇게 써 줌.

 

(5) WrongPrint()는 단순히 잘못된 입력을 출력하기 위한 메소드

 

(6)

hakjumPrint()

이것은 평균점수랑 학점을 함께 출력하기 위한 메소드, 평균점수와 학점을 파라미터로 방아야 하므로 (double avg, String hak) 이렇게 받아줌. 리턴값은 없는 메소드이므로, 메소드 내부의 실행문이 그대로 동작(여기서는 출력)

 

(7)

따라서 main 메소드에서는 checkRun(input()); 하나만으로도 모든 실행이 가능함.

input()에서 점수를 받고, 

checkRun 메서드는 파라미터 o, 리턴값 x 메서드이므로,

점수만 입력받으면 checkRun() 메서드에 있는 실행로직이 그대로 수행됨.

input()은 점수를 받는 과정 그 자체이므로, checkRun 괄호 안에 파라미터로 그대로 집어넣어서 출력하면 된다.

728x90
Comments