이전 시간에는 작성된 베이스코드의 기능을 리뷰하였고
앞으로 해당 코드를 어떻게 개선 할 수 있을 지 알아보았다.
그 결과, 베이스 코드는 절차 지향적으로 작성되어 코드의 가독성이나, 재사용성이 떨어진다고 판단, 이를 구조적으로 변경하기로 했다.
베이스 코드를 구조화 하기위해 나는 switch문의 각 분기를 매서드화 하기로 하였다.
분기
성적 입력 (case 1): 사용자로부터 세 과목의 국어 성적을 입력
성적 출력 (case 2): 세 번의 국어 성적을 출력하고, 총점과 평균을 계산하여 출력
종료 (case 3): 프로그램을 종료
이에 맞게 코드를 개선 해보려고 한다.
// ------ 성적 입력 부분 -------
case 1:
System.out.println("\n+---------------------------------+");
System.out.println("| 성적 입력 |");
System.out.println("+---------------------------------+");
do {
System.out.print("국어1: ");
kor1 = scan.nextInt();
if (kor1 < 0 || 100 < kor1)
System.out.println("성적범위(0 ~ 100)를 벗어났습니다.");
} while (kor1 < 0 || 100 < kor1);
do {
System.out.print("국어2: ");
kor2 = scan.nextInt();
if (kor2 < 0 || 100 < kor2)
System.out.println("성적범위(0 ~ 100)를 벗어났습니다.");
} while (kor2 < 0 || 100 < kor2);
do {
System.out.print("국어3: ");
kor3 = scan.nextInt();
if (kor3 < 0 || 100 < kor3)
System.out.println("성적범위(0 ~ 100)를 벗어났습니다.");
} while (kor3 < 0 || 100 < kor3);
break; // Add break statement here
위 코드는 switch 문의 첫번째 분기인 성적입력 부분인데 몇 가지 개선 되어야 할 사항이 있다.
static void inputGrades(int[] kors, Scanner scan) {
System.out.println("\n+---------------------------------+");
System.out.println("| 성적 입력 |");
System.out.println("+---------------------------------+");
for (int i = 0; i < kors.length; i++) {
do {
System.out.printf("국어%d: ", i + 1);
kors[i] = scan.nextInt();
if (kors[i] < 0 || 100 < kors[i])
System.out.println("성적범위(0 ~ 100)를 벗어났습니다.");
} while (kors[i] < 0 || 100 < kors[i]);
}
System.out.println("성적이 정상 입력되었습니다.");
}