ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA]구조적 프로그래밍(2)
    JAVA 2021. 3. 2. 00:32

     

    안녕하세요! 

    이번 포스팅은 지난 포스팅에 이어서, 코딩을 하면서 구조적 프로그래밍에 대해 알아보겠습니다.

    지난 국어성적입력 로직을 가져와 설명하겠습니다.

    이번 강의 역시 뉴렉처님 강의를 정리한 내용입니다. 

    www.youtube.com/watch?v=uIDfIjCeNx4&list=PLq8wAnVUcTFWQ4TpRPZRa5nj1VwfyO7st&index=2

    자세한 내용은 위 강의를 참고해주세요.

     

     

    오늘 포스팅의 학습목표는

     

    구조적인 프로그래밍을 이용하여 아래 로직을 함수를 이용하여 재설정 할 수 있다!

     

    입니다. 조금 어려울 수도 있어요! 하지만 이해되실때 까지 보시면 됩니다 하하핳..

     

    자 그럼 지난 시간에 정리한 코드를 리뷰해보겠습니다.

    package part2.ex1.성적입력부분나누기;
    
    import java.util.Scanner;
    
    public class Program2 {
    
    	public static void main(String[] args) {
    
    		int[] kors = new int[3];
    
    		int total = 0;
    		float avg;
    		int menu;
    		boolean keepLoop = true;
    
    		Scanner scan = new Scanner(System.in);
    
    		while (keepLoop) {
    			System.out.println("┌───────────────────────────┐");
    			System.out.println("│           메인 메뉴                   │");
    			System.out.println("└───────────────────────────┘");
    			System.out.println("\t1. 성적입력 ");
    			System.out.println("\t2. 성적출력 ");
    			System.out.println("\t3. 종료 ");
    			System.out.println("\t선택> ");
    			menu = scan.nextInt();
    
    			switch (menu) {
    			case 1:
    
    				System.out.println("┌───────────────────────────┐");
    				System.out.println("│           성적  입력                   │");
    				System.out.println("└───────────────────────────┘");
    				System.out.println();
    
    				for (int i = 0; i < 3; 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("─────────────────────────────");
    
    				break;
    			case 2:
    
    				for (int i = 0; i < 3; i++)
    					total += kors[i];
    
    				avg = total / 3.0f;
    
    				System.out.println("┌───────────────────────────┐");
    				System.out.println("│           성적  출력                   │");
    				System.out.println("└───────────────────────────┘");
    				System.out.println();
    
    				for (int i = 0; i < 3; i++)
    					System.out.printf("국어 %d : %3d\n", 3 - i, kors[i]);
    
    				System.out.printf("총점 : %3d\n", total);
    				System.out.printf("평균 : %6.2f\n", avg);
    				System.out.println("─────────────────────────────");
    
    				break;
    			case 3:
    				System.out.println("Bye~~");
    
    				keepLoop = false;
    				break;
    
    			default:
    				System.out.println("잘못된 값을 입력하셨습니다. 메뉴는 1~3까지입니다.");
    
    			}
    
    		}
    	}
    }
    

    코드가 어색하다구여? 계속 보세여 친해져요ㅋ

     

    지난 case문을 이용해서 국어성적 입력하는 부분을 공부했었는데요.

    지난 시간까지 한 방법이 절차적인 방법이었다면, 이번에는 구조적인 방법을 이용해 코딩을 해보겠습니다.

     

    일단 큰 틀에서 우리는 이러한 방법을 이용하겠습니다. 

    성적입력 코드를 함수로 뺀다는 내용

    위의 이미지 처럼 성적입력코드를 함수로 만들고, 사용하겠습니다.

    하지만 주의점이 있습니다. 바로 성적입력 코드를 함수로 빼면, main에 있는 kor를 사용할 수 없게 됩니다.

     

     

    static - 함수를 만들때 static을 붙여줍니다.

    void - 반환값이 없다면 void를 씁니다. 

    * 함수와 관련된 부분들은 더 알아봐야 될 것같습니다 :( *

    에러 발생

    에러발생 이유: kors라는 변수가 성적입력() 함수에는 없기 때문입니다.

     

    이러한 오류를 해결하기 위해 kors를 전역변수로 설정하는 방법이 있습니다.  

    kors를 main()과 성적입력() 함수 모두 사용할 수 있도록 전역변수로 설정한다

    최종 코드!

     

    package part2.ex1.성적입력부분나누기;
    
    import java.util.Scanner;
    
    public class Program2 {
    	static int[] kors = new int[3];
    
    	public static void main(String[] args) {
    
    		int total = 0;
    		float avg;
    		int menu;
    		boolean keepLoop = true;
    
    		Scanner scan = new Scanner(System.in);
    
    		while (keepLoop) {
    			System.out.println("┌───────────────────────────┐");
    			System.out.println("│           메인 메뉴                   │");
    			System.out.println("└───────────────────────────┘");
    			System.out.println("\t1. 성적입력 ");
    			System.out.println("\t2. 성적출력 ");
    			System.out.println("\t3. 종료 ");
    			System.out.println("\t선택> ");
    			menu = scan.nextInt();
    
    			switch (menu) {
    			case 1:
    
    				성적입력();
    				
    				break;
    			case 2:
    
    				for (int i = 0; i < 3; i++)
    					total += kors[i];
    
    				avg = total / 3.0f;
    
    				System.out.println("┌───────────────────────────┐");
    				System.out.println("│           성적  출력                   │");
    				System.out.println("└───────────────────────────┘");
    				System.out.println();
    
    				for (int i = 0; i < 3; i++)
    					System.out.printf("국어 %d : %3d\n", 3 - i, kors[i]);
    
    				System.out.printf("총점 : %3d\n", total);
    				System.out.printf("평균 : %6.2f\n", avg);
    				System.out.println("─────────────────────────────");
    
    				break;
    			case 3:
    				System.out.println("Bye~~");
    
    				keepLoop = false;
    				break;
    
    			default:
    				System.out.println("잘못된 값을 입력하셨습니다. 메뉴는 1~3까지입니다.");
    
    			}
    
    		}
    	}
    	
    	static void 성적입력(){
    	
    		Scanner scan = new Scanner(System.in);
    		
    	System.out.println("┌───────────────────────────┐");
    	System.out.println("│           성적  입력                   │");
    	System.out.println("└───────────────────────────┘");
    	System.out.println();
    
    	for (int i = 0; i < 3; 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("─────────────────────────────");
    
    		
    	}
    	
    }
    

     

    짜라란! 

     

    여기서,  Scanner scan = new Scanner(System.in); 

    전역 변수로 따로 사용하지 않고, 각 함수별로 나타냅시다!

     

    case1 부분을 구조적으로 나타냈으니

    다음에 할 부분은 case2 , case3 에 대한 함수를 만드는 것이겠죠? 

    이 부분도 생각해보고 코딩해보면 재밌을거 같습니다! 

     

    그럼 다음에 뵙겠습니다

     

     

      

     

     

     

     

     

     

     

     

     

     

     

     

    'JAVA' 카테고리의 다른 글

    [JAVA]구조적 프로그래밍(4)  (0) 2021.03.03
    [JAVA]구조적 프로그래밍(3)  (0) 2021.03.03
    [JAVA]구조적 프로그래밍(1)  (0) 2021.03.02
    [JAVA] 배열의 중요성  (0) 2021.02.26
    [JAVA] 제어 구조 if 와 while  (0) 2021.02.25

    댓글

Designed by Tistory.