Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

jeongwon

[연습문제] 반복문 본문

오늘의 문제

[연습문제] 반복문

jeongwon_ 2022. 4. 27. 00:28

문제: 성적 프로그램 작성.

 

import java.util.Scanner;

public class TotalScore {
	public static void main(String[] args) {
		int kor, eng, mat, tot;
		int kor2, eng2, mat2, tot2;
		int kor3, eng3, mat3, tot3;
		double avg, avg2, avg3;
		String grade, grade2, grade3="";
		
		Scanner sc = new Scanner(System.in);
		System.out.print("국어:");
		kor = sc.nextInt();
		System.out.print("영어:");
		eng = sc.nextInt();
		System.out.print("수학:");
		mat = sc.nextInt();
		System.out.println();
		tot = kor+eng+mat;
		avg = tot/3.0;
		
		switch ((int) (avg / 10)) {
		case 10:
		case 9:
			grade = "수";
			break;
		case 8:
			grade = "우";
			break;
		case 7:
			grade = "미";
			break;
		case 6:
			grade = "양";
			break;
		default:
			grade = "가";
		}// end switch
		
		System.out.print("국어:");
		kor2 = sc.nextInt();
		System.out.print("영어:");
		eng2 = sc.nextInt();
		System.out.print("수학:");
		mat2 = sc.nextInt();
		System.out.println();
		tot2 = kor2+eng2+mat2;
		avg2 = tot2/3.0;
		
		switch ((int) (avg2 / 10)) {
		case 10:
		case 9:
			grade2 = "수";
			break;
		case 8:
			grade2 = "우";
			break;
		case 7:
			grade2 = "미";
			break;
		case 6:
			grade2 = "양";
			break;
		default:
			grade2 = "가";
		}// end switch
		
		System.out.print("국어:");
		kor3 = sc.nextInt();
		System.out.print("영어:");
		eng3 = sc.nextInt();
		System.out.print("수학:");
		mat3 = sc.nextInt();
		System.out.println();
		tot3 = kor3+eng3+mat3;
		avg3 = tot3/3.0;
		sc.close();
		
		switch ((int) (avg3 / 10)) {
		case 10:
		case 9:
			grade3 = "수";
			break;
		case 8:
			grade3 = "우";
			break;
		case 7:
			grade3 = "미";
			break;
		case 6:
			grade3 = "양";
			break;
		default:
			grade3 = "가";
		}// end switch
		
		System.out.println("=============================================");
		System.out.println("국어\t영어\t수학\t총점\t평균\t등급");
		System.out.println("---------------------------------------------");

		System.out.printf("%d\t%d\t%d\t%d\t%.1f\t%s\n", kor, eng, mat, tot, avg, grade);
		System.out.printf("%d\t%d\t%d\t%d\t%.1f\t%s\n", kor2, eng2, mat2, tot2, avg2, grade2);
		System.out.printf("%d\t%d\t%d\t%d\t%.1f\t%s\n", kor3, eng3, mat3, tot3, avg3, grade3);
		System.out.println("=============================================");
	}
}

 

반복문을 이용해 입력값을 받으려 했지만 변수에 값을 누적으로 저장할 수 있다는 개념을 떠올리지 못해 포기했다. 

 


개선 답안:

import java.util.Scanner;

public class Totalscore2 {
	public static void main(String[] args) {
		int kor, eng, mat, tot;
		double avg;
		String grade;
		String rep = "";
		
		Scanner sc = new Scanner(System.in);
		for (int i=0; i<3; i++) {		
			System.out.print("국어 : ");
			kor = sc.nextInt();
			System.out.print("영어 : ");
			eng = sc.nextInt();
			System.out.print("수학 : ");
			mat = sc.nextInt();
			System.out.println();
			tot = kor+eng+mat;
			avg = tot/3.0;
			
			switch ((int) (avg / 10)) {
			case 10:
			case 9:
				grade = "수";
				break;
			case 8:
				grade = "우";
				break;
			case 7:
				grade = "미";
				break;
			case 6:
				grade = "양";
				break;
			default:
				grade = "가";
			}// end switch
			
			rep += kor+"\t"+eng+"\t"+ mat+ "\t"+ tot+ "\t" + avg +"\t"+ grade+"\n";

		}
		sc.close();
		
		System.out.println("=============================================");
		System.out.println("국어\t영어\t수학\t총점\t평균\t등급");
		System.out.println("---------------------------------------------");
		System.out.print(rep);
		System.out.println("=============================================");
	}
}

rep 이라는 변수에 값이 누적으로 저장돼 print 함수를 통해 값이 모두 출력된다.

 

개선답안2: 

import java.util.Scanner;

public class Totalscore2 {
	public static void main(String[] args) {
		int kor, eng, mat, tot;
		double avg;
		String grade;
		String rep = "";
		
		Scanner sc = new Scanner(System.in);
		for (int i=0; i<3; i++) {		
			System.out.print("국어 : ");
			kor = sc.nextInt();
			System.out.print("영어 : ");
			eng = sc.nextInt();
			System.out.print("수학 : ");
			mat = sc.nextInt();
			System.out.println();
			tot = kor+eng+mat;
			avg = tot/3.0;
			
			switch ((int) (avg / 10)) {
			case 10:
			case 9:
				grade = "수";
				break;
			case 8:
				grade = "우";
				break;
			case 7:
				grade = "미";
				break;
			case 6:
				grade = "양";
				break;
			default:
				grade = "가";
			}// end switch
			
			rep += String.format("%d\t%d\t%d\t%d\t%.1f\t%s\n", kor, eng, mat, tot, avg, grade);

		}
		sc.close();
		
		System.out.println("=============================================");
		System.out.println("국어\t영어\t수학\t총점\t평균\t등급");
		System.out.println("---------------------------------------------");
		System.out.print(rep);
		System.out.println("=============================================");
	}
}

String.format 함수를 이용하면 printf 기능을 활용할 수 있다. 소수점 1자리까지 설정.