Java 코드연습

[뉴렉처] 코드 구조화 Bottom Up 방식 연습

양상추상츄 2021. 10. 17. 23:41

*Bottom Up

절차를 잘라서 구조적으로 만듬

 

*Top down

코드없이 구조부터 만들어서 진행

 

*전역변수를 만들때는 static을 붙인다

 

-> Bottom Up 방식으로 아래 코드 구조화 진행연습

package test;

import java.util.Scanner;

public class Program {

	public static void main(String[] args) {
		
		int size = 3;
		int[] kors = new int[size];
		int total;
		float avg;
		int menu = 0; // 1.INPUT 2.PRINT 3.EXIT
		final int MENU_INPUT = 1; // 상수
		final int MENU_PRINT = 2; // 상수
		final int MENU_EXIT = 3; // 상수
		boolean loop = true;
		
		Scanner scan = new Scanner(System.in);
		
		for(int i=0; i<size; i++) { // 점수 초기화
			kors[i] = 0;
		}
		
		while(loop){
			System.out.println("\t1.성적입력");
			System.out.println("\t2.성적출력");
			System.out.println("\t3.종료");
			System.out.print("\t>>>");
			
			menu = scan.nextInt();
			
			switch(menu) {
			case MENU_INPUT://1
				//성적입력--------------------------------------
				System.out.println("------------------------------------");
				System.out.println("@@@@@@@@@@@@@성적입력@@@@@@@@@@@@@@@@");
				for(int i=0; i<size; i++){
					do{
						System.out.printf("국어%d : ",i+1);
						kors[i]=scan.nextInt();//점수입력
						
						if(kors[i]<0||100<kors[i]) {
							System.out.println("성적범위를 벗어났습니다.");
						}
					}while(kors[i]<0||100<kors[i]); // 점수 범위를 벗어날 경우 false, 위의 내용 다시 반복		
				}
				
			case MENU_PRINT://2
				//성적출력--------------------------------------
				total = kors[0] + kors[1] + kors[2];
				avg = total / 3.0f;
				
				System.out.println("------------------------------------");
				System.out.println("@@@@@@@@@@@@@성적출력@@@@@@@@@@@@@@@@");
				for(int i=0; i<size; i++) {
					System.out.printf("\t국어%d: %3d\n", i+1, kors[i]);// \t 탭, %3d 3칸 정렬, \n 한칸내리기
				}
				
				System.out.printf("\t총점: %3d\n", total); // 3칸 정렬
				System.out.printf("\t평균: %6.2f\n", avg); // 소수점 2자리 까지 나오고 6칸 정렬
				System.out.println("------------------------------------");
				break;
			
			case MENU_EXIT://3
				//EXIT
				break;
			
			default:
				System.out.println("입력오류 : 1에서 3까지만 입력 할 수 있습니다.");
				
			}
			
			System.out.println("good bye~");
			break;
		}
		
		
	}

}

완전 똑같이는 하지 않음

 

*출력예시

1.성적입력
2.성적출력
3.종료
>>>1
------------------------------------
@@@@@@@@@@@@@성적입력@@@@@@@@@@@@@@@@
국어1 : 2
국어2 : 2
국어3 : 2
------------------------------------
@@@@@@@@@@@@@성적출력@@@@@@@@@@@@@@@@
국어1:   2
국어2:   2
국어3:   2
총점:   6
평균:   2.00
------------------------------------
good bye~

이런식으로 변경함

package test;

import java.util.Scanner;

public class Program {
	
	static int size = 3;
	static int[] kors = new int[size];
	static Scanner scan = new Scanner(System.in);
	
	
	public static void main(String[] args) {
		
		int menu = 0; // 1.INPUT 2.PRINT 3.EXIT
		final int MENU_INPUT = 1; // 상수
		final int MENU_PRINT = 2; // 상수
		final int MENU_EXIT = 3; // 상수
		boolean loop = true;
		
		//메뉴
		while(loop){
			System.out.println("\t1.성적입력");
			System.out.println("\t2.성적출력");
			System.out.println("\t3.종료");
			System.out.print("\t>>>");
			
			menu = scan.nextInt();
			
			switch(menu) {
			
			case MENU_INPUT://1
				gradeEnter();
				
			case MENU_PRINT://2
				gradeOutput();
			
			case MENU_EXIT://3
				//EXIT
				break;
			
			default:
				System.out.println("입력오류 : 1에서 3까지만 입력 할 수 있습니다.");
				
			}
			
			System.out.println("good bye~");
			break;
		}
		
	}
	
	//성적입력--------------------------------------
	static void gradeEnter() {
		
		// 점수 초기화
		for(int i=0; i<size; i++) { 
			kors[i] = 0;
		}
		
		System.out.println("------------------------------------");
		System.out.println("@@@@@@@@@@@@@성적입력@@@@@@@@@@@@@@@@");
		for(int i=0; i<size; i++){
			do{
				System.out.printf("국어%d : ",i+1);
				kors[i]=scan.nextInt();//점수입력
				
				if(kors[i]<0||100<kors[i]) {
					System.out.println("성적범위를 벗어났습니다.");
				}
			}while(kors[i]<0||100<kors[i]); // 점수 범위를 벗어날 경우 false, 위의 내용 다시 반복		
		}
	}
	
	//성적출력--------------------------------------
	static void gradeOutput() {
		int total;
		float avg;
		
		total = kors[0] + kors[1] + kors[2];
		avg = total / 3.0f;
		
		System.out.println("------------------------------------");
		System.out.println("@@@@@@@@@@@@@성적출력@@@@@@@@@@@@@@@@");
		for(int i=0; i<size; i++) {
			System.out.printf("\t국어%d: %3d\n", i+1, kors[i]);// \t 탭, %3d 3칸 정렬, \n 한칸내리기
		}
		
		System.out.printf("\t총점: %3d\n", total); // 3칸 정렬
		System.out.printf("\t평균: %6.2f\n", avg); // 소수점 2자리 까지 나오고 6칸 정렬
		System.out.println("------------------------------------");
		
	}

}