[Java] 메서드를 이용하여 합계, 평균, 평균의 성취도, 취약과목 출력하기

Haeun Noh·2022년 8월 25일
0

JAVA_예제

목록 보기
17/23
post-thumbnail

0825


문제

세 과목의 점수를 입력받아 합계, 평균, 평균의 성취도, 취약과목을 출력하는 프로그램을 작성하라.

실행결과 예시

점수를 입력하세요 : 100
점수를 입력하세요 : 90
점수를 입력하세요 : 80
======= 성적 처리 결과 =======
합계 : 270      평균 : 90
성취도 : A
===== 노력이 가장 필요한 교과 =====
과목 : 과목3    점수 : 80

소스코드

import java.util.Scanner;
public class Test1109{
	public static void main(String args[]) {
		Scanner scan = new Scanner(System.in);
		
		// 시험 점수 입력
        System.out.print("점수를 입력하세요 : ");
		int sc1 = scan.nextInt();
		System.out.print("점수를 입력하세요 : ");
		int sc2 = scan.nextInt();
		System.out.print("점수를 입력하세요 : ");
		int sc3 = scan.nextInt();
        
        System.out.println("======= 성적 처리 결과 =======");
        
        // 성적 합계와 평균 구하기
        int sum = sc1 + sc2 + sc3;
		int avg = sum / 3;
		System.out.println("합계 : "+sum+"	평균 : "+avg); 
        
        // 성취도 구하기
        System.out.print("성취도 : ");
		switch(avg/10) {
			case 10 : 
			case 9 : System.out.println("A"); break;
			case 8 : System.out.println("B"); break;
			case 7 : System.out.println("C"); break;
			default : System.out.println("D"); break;
		} 
        
        System.out.println("===== 노력이 가장 필요한 교과 =====");

		// 성적의 최솟값 구하기
        int min;
		if ( sc1 < sc2 ) {
			if ( sc1 < sc3 ) min = sc1;
			else min = sc3;
		}
		else {
			if ( sc2 < sc3 ) min = sc2;
			else min = sc3;
		}
        
        // 제일 낮은 점수의 과목과 점수 출력하기
        System.out.print("과목 : ");
		if ( min == sc1 ) System.out.println("과목1	"+"점수 : "+min );
		else if ( min == sc2 ) System.out.println("과목2	"+"점수 : "+min );
		else System.out.println("과목3	"+"점수 : "+min );
	}
}

소스코드 풀이

// 시험 점수 입력
        System.out.print("점수를 입력하세요 : ");
		int sc1 = scan.nextInt();
		System.out.print("점수를 입력하세요 : ");
		int sc2 = scan.nextInt();
		System.out.print("점수를 입력하세요 : ");
		int sc3 = scan.nextInt();

과목 3개의 점수를 입력받는다.


        System.out.println("======= 성적 처리 결과 =======");
        
        // 성적 합계와 평균 구하기
        int sum = sc1 + sc2 + sc3;
		int avg = sum / 3;
		System.out.println("합계 : "+sum+"	평균 : "+avg); 

입력받은 성적 sc1 sc2 sc3 3개를 더해 성적 합계를 구하여 sum변수에 저장한다.
성적 합계를 성적 갯수로 나누어 평균을 구한 다음 avg변수에 저장한다.
sum avg를 차례로 출력한다.


 // 성취도 구하기
        System.out.print("성취도 : ");
		switch(avg/10) {
			case 10 : 
			case 9 : System.out.println("A"); break;
			case 8 : System.out.println("B"); break;
			case 7 : System.out.println("C"); break;
			default : System.out.println("D"); break;
		} 

성적 평균으로 성취도를 계산한다.
90점 이상이면 A
80점 이상이면 B
70점 이상이면 C
70점 미만이면 D 를 출력한다.

switch문을 이용하여 성취도를 계산한다.
조건부분에 과목 평균을 나타내는 avg10으로 나누어 넣는다. 이 때 10으로 나누는 이유는 case 100 case 99 case 98 ... case 1을 전부 쓰면 불필요한 데이터를 많이 소진하게 되기 때문에 10의 자리 부분만을 보게 하여 불필요한 수식을 제거하기 위함이다.

70점 미만은 전부 D등급이기 때문에 default값으로 넣어주었다.


System.out.println("===== 노력이 가장 필요한 교과 =====");

		// 성적의 최솟값 구하기
        int min;
		if ( sc1 < sc2 ) {
			if ( sc1 < sc3 ) min = sc1;
			else min = sc3;
		}
		else {
			if ( sc2 < sc3 ) min = sc2;
			else min = sc3;
		}

sc1 sc2 sc3 중에서 제일 최하점을 구한다.
최솟값은 변수 min으로 잡아준다.
sc1sc2보다 작고 sc3보다도 작으면 minsc1의 값이 저장된다.
아래도 다음과 같다.


// 제일 낮은 점수의 과목과 점수 출력하기
        System.out.print("과목 : ");
		if ( min == sc1 ) System.out.println("과목1	"+"점수 : "+min );
		else if ( min == sc2 ) System.out.println("과목2	"+"점수 : "+min );
		else System.out.println("과목3	"+"점수 : "+min );

제일 낮은 점수의 과목명과 점수를 출력한다.
최솟값을 뜻하는 min과 과목명이 같다면 해당 과목명과 min을 출력한다.



업드레이드 문제

다음 조건에 따라 세 과목의 점수를 입력받아 합계, 평균, 평균의 성취도, 취약과목을 출력하는 프로그램을 메서드를 사용하여 작성하라.

실행결과

점수를 입력하세요 : 100
점수를 입력하세요 : 90
점수를 입력하세요 : 80
======= 성적 처리 결과 =======
합계 : 270      평균 : 90
성취도 : A
===== 노력이 가장 필요한 교과 =====
과목 : 과목3    점수 : 80

조건

1 점수 입력받는 메서드 : keyInput( ) 메서드

  • 점수는 키보드를 통해 입력받는다.
  • 세 과목의 점수를 입력받을 때 keyInput() 메서드를 호출

2 합계, 평균, 평균의 성취도 구하는 메서드 : getResult1( )

  • 평균의 성취도 출력 => 계산은 반드시 switch문을 이용
  • 90점 이상이면 A, 80점 이상이면 B, 70점 이상이면 C, 나머지는 D
  • 합계와 평균의 데이터타입은 정수형

3 3등 과목(취약과목)을 출력하는 메서드 : getResult2( )

  • 5 세 과목의 점수를 비교 => 반드시 if문 사용

소스코드

import java.util.Scanner;
public class Test1109{
	public static void main(String args[]) {
		
		// 시험 점수 입력
       	int sc1 = keyInput();
		int sc2 = keyInput();
		int sc3 = keyInput();
        
       	 System.out.println("======= 성적 처리 결과 =======");

		// 성적 합계와 평균, 성취도 구하기
        getResult1(sc1, sc2, sc3);
	
        System.out.println("===== 노력이 가장 필요한 교과 =====");

		// 성적의 최솟값 구하기
		int min = getResult2(sc1, sc2, sc3);
		
        // 제일 낮은 점수의 과목과 점수 출력하기
		System.out.print("과목 : ");
		if ( min == sc1 ) System.out.println("과목1	"+"점수 : "+min );
		else if ( min == sc2 ) System.out.println("과목2	"+"점수 : "+min );
		else System.out.println("과목3	"+"점수 : "+min );	
	}

	static int keyInput() {
		Scanner scan = new Scanner(System.in);
		System.out.print("점수를 입력하세요 : ");
		int score = scan.nextInt();
		
		return score;
	}

	static void getResult1(int sc1, int sc2, int sc3) {
		int sum = sc1 + sc2 + sc3;
		int avg = sum / 3;
		System.out.println("합계 : "+sum+"	평균 : "+avg);

		System.out.print("성취도 : ");
		switch(avg/10) {
			case 10 : 
			case 9 : System.out.println("A"); break;
			case 8 : System.out.println("B"); break;
			case 7 : System.out.println("C"); break;
			default : System.out.println("D"); break;
		} 
	}

	static int getResult2(int sc1, int sc2, int sc3) {
		int min;
		if ( sc1 < sc2 ) {
			if ( sc1 < sc3 ) min = sc1;
			else min = sc3;
		}
		else {
			if ( sc2 < sc3 ) min = sc2;
			else min = sc3;
		}
		return min;
	}
}       

소스코드 풀이

static int keyInput() {
		Scanner scan = new Scanner(System.in);
		System.out.print("점수를 입력하세요 : ");
		int score = scan.nextInt();
		
		return score;
	}

점수 입력의 기능을 하는 메서드이다.

static int keyInput() {

static정적 메서드이다.
intreturn을 하는 변수의 타입이다. 반환값이 정수이면 int를 사용하고, 반환값이 실수이면 double을 사용할 수 있다.
keyInput()메서드명이다. 메서드명 옆의 ()에 매개변수가 없는 이유는 main 메서드에서 가져올 변수가 없기 때문이다. 매개변수는 없어도 프로그램에 문제가 없다.

		Scanner scan = new Scanner(System.in);
		System.out.print("점수를 입력하세요 : ");
		int score = scan.nextInt();
		
		return score;

입력을 받기 위해 Scanner를 사용한다.
점수 안내 멘트를 출력한다.
입력받은 점수를 score에 저장한 후 score값을 return하여 main 메서드로 보낸다. return은 한 메서드에 하나만 사용할 수 있다.
메서드끼리는 서로 동급이므로 메서드 안에 메서드가 있을 수 없으며, 변수명이 같은 것이 있어도 엄연히 다른 변수로 간주된다.


static void getResult1(int sc1, int sc2, int sc3) {
		int sum = sc1 + sc2 + sc3;
		int avg = sum / 3;
		System.out.println("합계 : "+sum+"	평균 : "+avg);

		System.out.print("성취도 : ");
		switch(avg/10) {
			case 10 : 
			case 9 : System.out.println("A"); break;
			case 8 : System.out.println("B"); break;
			case 7 : System.out.println("C"); break;
			default : System.out.println("D"); break;
		} 
	}

점수의 합계 평균 평균의 성취도를 구하는 메서드이다.

static void getResult1(int sc1, int sc2, int sc3) {

void는 반환을 하지 않는다는 뜻이다. void가 명시되어 있는 메서드에서는 return을 통해 값을 반환할 수 없다.

(int sc1, int sc2, int sc3)

부분에서 sc1 sc2 sc3 변수들은 main 메서드에서 어떠한 변수의 값을 가져와서 getResult1 메서드에서 해당 변수들을 사용할 수 있게 한다.

		int sum = sc1 + sc2 + sc3;
		int avg = sum / 3;
		System.out.println("합계 : "+sum+"	평균 : "+avg);

sc1 sc2 sc3의 합계를 sum에 저장한다.
성적 합계를 성적의 갯수만큼 나누어 avg에 평균 점수를 저장한다.
합계와 평균을 차례로 출력한다.

System.out.print("성취도 : ");
		switch(avg/10) {
			case 10 : 
			case 9 : System.out.println("A"); break;
			case 8 : System.out.println("B"); break;
			case 7 : System.out.println("C"); break;
			default : System.out.println("D"); break;
     } 
}

위에서 구한 점수 평균을 switch문에서 조건을 avg/10로 설정해 구한다. 자세한 설명은 위로 다시 돌아가서 보도록 하자.
아까 리턴값의 타입이 void였기 때문에 return은 사용하지 않는다.


static int getResult2(int sc1, int sc2, int sc3) {
		int min;
		if ( sc1 < sc2 ) {
			if ( sc1 < sc3 ) min = sc1;
			else min = sc3;
		}
		else {
			if ( sc2 < sc3 ) min = sc2;
			else min = sc3;
		}
		return min;
	}

매개변수sc1 sc2 sc3의 값을 main 메서드에서 가져온다.
최솟값을 min변수로 잡고 min변수에 가장 못한 과목의 점수가 들어간다. 자세한 설명은 위로 다시 돌아가서 보도록 하자.
main 메서드에서 최솟값이라는 변수가 필요하므로 min값을 return시켜준다.


이제 이렇게 메서드로 만든 기능들을 프로그램에서 사용할 시간이다.


import java.util.Scanner;
public class Test1109{
	public static void main(String args[]) {
		
		// 시험 점수 입력
       	int sc1 = keyInput();
		int sc2 = keyInput();
		int sc3 = keyInput();
        
       	System.out.println("======= 성적 처리 결과 =======");

		// 성적 합계와 평균, 성취도 구하기
        getResult1(sc1, sc2, sc3);
	
        System.out.println("===== 노력이 가장 필요한 교과 =====");

		// 성적의 최솟값 구하기
		int min = getResult2(sc1, sc2, sc3);
		
        // 제일 낮은 점수의 과목과 점수 출력하기
		System.out.print("과목 : ");
		if ( min == sc1 ) System.out.println("과목1	"+"점수 : "+min );
		else if ( min == sc2 ) System.out.println("과목2	"+"점수 : "+min );
		else System.out.println("과목3	"+"점수 : "+min );	
	}

입력받는 기능은 keyInput() 메서드에서 해주고 있기 때문에 main 메서드에서 Scanner를 선언해줄 필요는 없다.


		// 시험 점수 입력
       	int sc1 = keyInput();
		int sc2 = keyInput();
		int sc3 = keyInput();

keyInput()에서 반환한 값인 scoresc1 sc2 sc3에 저장한다.


		System.out.println("======= 성적 처리 결과 =======");

		// 성적 합계와 평균, 성취도 구하기
        getResult1(sc1, sc2, sc3);

getResult1()를 호출해 기능을 수행한다.
매개변수로 sc1 sc2 sc3를 넣어 main 메서드에 있는 변수들의 값을 getResult()로 이동시켜 사용할 수 있게 한다.
성적 합계와 평균, 성취도를 구하는 기능을 하고 출력을 getResult()에서 해주므로 return값이 있을 필요도 어떠한 변수에 저장할 필요도 없다.


		System.out.println("===== 노력이 가장 필요한 교과 =====");

		// 성적의 최솟값 구하기
		int min = getResult2(sc1, sc2, sc3);

getResult2()를 호출하여 getResult2()로 이동한다.
getResult2()에서는 sc1 sc2 sc3의 값을 가지고 특정 변수에 그 값을 저장해 사용한다.
getResult2()에서 구한 최솟값을 반환하여 가지고 와서 min 변수에 저장한다.
아래에서 제일 낮은 점수의 과목과 점수를 출력해야 하기 때문에 최솟값을 반환시켜야 했다.


		// 제일 낮은 점수의 과목과 점수 출력하기
		System.out.print("과목 : ");
		if ( min == sc1 ) System.out.println("과목1	"+"점수 : "+min );
		else if ( min == sc2 ) System.out.println("과목2	"+"점수 : "+min );
		else System.out.println("과목3	"+"점수 : "+min );	
	}

getResult2()에서 구한 최솟값인 min을 사용하여 제일 낮은 점수의 과목과 점수를 출력한다. 더 자세한 내용은 위의 내용을 참고하자.


실행 결과

점수를 입력하세요 : 100
점수를 입력하세요 : 60
점수를 입력하세요 : 1
======= 성적 처리 결과 =======
합계 : 161      평균 : 53
성취도 : D
===== 노력이 가장 필요한 교과 =====
과목 : 과목3    점수 : 1


profile
기록의 힘을 믿는 개발자, 노하은입니다!

0개의 댓글