ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 배열의 중요성
    JAVA 2021. 2. 26. 13:59

    안녕하세요! 저번 시간에는 JAVA의 제어구조에 대해 정리했습니다.

     

    이번에는 제어구조를 다 알고 있다는 가정하에!

    ( 뉴렉처님

    www.youtube.com/watch?v=p3xABYu0B0c&list=PLq8wAnVUcTFV7wEVu2qcAChtAOYusZwzj&index=26 강의를 참고해주세요)

    이 코드를 어떻게 하면 더 깔끔하게 정리할 수 있을까? 

    라는 질문에 대한 답을 찾으려고합니다!

     

    그것은 바로, 바로, 바로, 바로,  배열이라는 개념입니다!

     

    일단 개념에 대해 설명 드갑니다!

    JUMP TO JAVA 배열에 관한 이미지

    wikidocs.net/206 자세한 설명은 링크 타시면 나와있습니다!

     

    일단 저번 시간까지 배운 자바 제어구조를 살펴봅시다람쥐

     

    코드 나와~~

    package ex12.control2.switch_;
    
    import java.util.Scanner;
    
    public class Program {
    
    	public static void main(String[] args) {
    
    		int kor1, kor2, kor3;
    		int total;
    		float avg;
    		int menu;
    		Scanner scan = new Scanner(System.in);
    
    		kor1 = 0;
    		kor2 = 0;
    		kor3 = 0;
    
    		종료:
    		while (true) {
    			// -----------------메뉴입력부분=-----
    			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("───────────────────────────");
    
    				do {
    					System.out.println("국어1:");
    					kor1 = scan.nextInt();
    
    					if (kor1 < 0 || 100 < kor1)
    						System.out.println("성적범위(0~100)을 초과했습니다.");
    
    				} while (kor1 < 0 || 100 < kor1);
    				
    				
    				do {
    					System.out.println("국어2:");
    					kor2 = scan.nextInt();
    
    					if (kor2 < 0 || 100 < kor2)
    						System.out.println("성적범위(0~100)을 초과했습니다.");
    
    				} while (kor2 < 0 || 100 < kor2);
    
    				do {
    					System.out.println("국어3:");
    					kor3 = scan.nextInt();
    
    					if (kor3 < 0 || 100 < kor3)
    						System.out.println("성적범위(0~100)을 초과했습니다.");
    
    				} while (kor3 < 0 || 100 < kor3);
    			
    			case 2: 
    				// -----성적 출력 부분-------------------
    
    				total = kor1 + kor2 + kor3;
    				avg = total / 3.0f;
    
    				System.out.println("────────────────────────── ");
    				System.out.println("성적 출력");
    				System.out.println("───────────────────────────");
    
    				System.out.printf("\t국어1: %3d\n", kor1);
    				System.out.printf("\t국어2: %3d\n", kor2);
    				System.out.printf("\t국어3: %3d\n", kor3);
    				System.out.printf("\t총점: %3d\n", total);
    				System.out.printf("\t평균: %6.2f\n", avg);
    				System.out.printf("------------------------\n");
    				break;
    				
    			case 3:  
    				break 종료;
    			
    			default:
    				System.out.println("---입력오류 1~3까지만 입력가능합니다. ");
    			}
    			
    		}
    		System.out.println("good bye~");
    	}
    }
    

     

    위 코드를 보고 이해하지 못하는 분은 그냥 넘어오지 마시고 꼭 강의를 듣고 오시는것을 추천드립니다!

    뉴렉처 JAVA강의 ~33강까지입니다.

     

    위의 코드는 실행은 잘 되긴하지만 치명적인 단점이 존재합니다!

    너무 길잖아ㅜㅜ 가독성이 떨어지자나~~ 

    그래서 오늘의 해결책 배열을 이용합니다! 

    어느 부분을 배열을 이용할지 감이 오시나요?? 다 알고 있는거 압니다! 허허허허

    자 그럼 배열을 이용한 코드 들어갑니다! 한번 비교해 봅시다

     

    package ex14.array;
    
    import java.util.Scanner;
    
    public class Program {
    
    	public static void main(String[] args) {
    
    		//int kor1, kor2, kor3;
    		int[] kors = new int[3];
    		int total;
    		float avg;
    		int menu;
    		Scanner scan = new Scanner(System.in);
    
    		/*
    		 * kor1 = 0; kor2 = 0; kor3 = 0;
    		 */
    		for(int i=0; i<3; i++)
    			kors[i] = 0;
    		//초기화 하지 않아도 위의 주석처럼 똑같다!
    		종료:
    		while (true) {
    			// -----------------메뉴입력부분=-----
    			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("----------");
    
    				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]);
    				
    				
    			
    			case 2: 
    				// -----성적 출력 부분-------------------
    
    				//total = kor1 + kor2 + kor3;
    				total = kors[0]+kors[1]+kors[2];
    				avg = total / 3.0f;
    
    				System.out.println("-------");
    				System.out.println(" 성적 출력");
    				System.out.println("-------");
    
    				for(int i=0; i<3; i++)
    					
    				System.out.printf("\t국어%d : %3d\n", i+1, kors[i]);
    				System.out.printf("\t총점: %3d\n", total);
    				System.out.printf("\t평균: %6.2f\n", avg);
    				System.out.printf("------------------------\n");
    				break;
    				
    			case 3:  
    				break 종료;
    			
    			default:
    				System.out.println("---입력오류 1~3까지만 입력가능합니다. ");
    			}
    			
    		}
    		System.out.println("good bye~");
    	}
    }
    

     

     

     위 2가지의 코드를 비교해봅시다

    1. 배열선언할때 3줄 -> 1줄로 줄였습니다.

    2. case 1: 부분의 do while 부분을 한번만 이용하여

    kor1, kor2 , kor3 의 성적입력 로직을 효율적으로 바꾸게 되었습니다.

     

    위의 코드의 경우 성적 입력부분이 3가지 밖에 안되었지만, 만일 이것이 1000000000000개라면 얘기가 달라지겠죠!

     

     

    오늘의 띵언을 마무리로 글을 마칩니다.

    기계를 잘 굴릴줄 아는 사람이 되어야 겠습니다

     

     

    이 글은 유투브 뉴렉처님의 강의를 바탕으로 제작된 것입니다. 

    내용 설명및 자세한 내용에 대해서는 강의를 직접 듣는 것이 더 효율적으로 보입니다.

    'JAVA' 카테고리의 다른 글

    [JAVA]구조적 프로그래밍(4)  (0) 2021.03.03
    [JAVA]구조적 프로그래밍(3)  (0) 2021.03.03
    [JAVA]구조적 프로그래밍(2)  (0) 2021.03.02
    [JAVA]구조적 프로그래밍(1)  (0) 2021.03.02
    [JAVA] 제어 구조 if 와 while  (0) 2021.02.25

    댓글

Designed by Tistory.