ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 제어 구조 if 와 while
    JAVA 2021. 2. 25. 17:32

    이 글은 유투브 뉴렉처님의 강의를 참고하여 만든 내용입니다.

    내용 기술은 제 글을 참고하기보다는

    뉴렉처www.youtube.com/channel/UC5-ixpj8DioZqmrasj6Ihpw 님의 강의를 참고해주세요!

     

     

     

     

    IF문과 WHILE문의 차이란? 

    프로그래머는 흐름을 만드는 사람이고 흐름을 제어하는 사람이다.

    제어구조를 잘 이해하고 만드는 것이 프로그래밍을 잘하는 사람입니다.

     

    뉴렉처님의 말씀입니다.

     

    오늘은 언제 if와 while을 언제쓰는지 차이점을 알아보겠습니다 ㅎㅎ

     

    아래와 같은 코드가 있다고 합니다!

    package ex07.control1;
    
    import java.util.Scanner;
    
    public class Program {
    
    	public static void main(String[] args) {
    		
    		int kor1, kor2, kor3;
    		int total;
    		float avg;
    		
    		Scanner scan = new Scanner(System.in);
    		
    		kor1 = 0;
    		kor2 = 0;
    		kor3 = 0;
    		
    		System.out.println("┌───────────────────────────┐");
    		System.out.println("│		  성적 입력			│");
    		System.out.println("└───────────────────────────┘");
    
    		System.out.println("국어1:");
    		kor1 = scan.nextInt();
    		
    		
    		System.out.println("국어2:");	
    		kor2 = scan.nextInt();
    		
    		System.out.println("국어3:");
    		kor3 = scan.nextInt();
    		
    		
    		//-----성적 출력 부분-------------------
    		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");
    		}
    	}
    }
    
    

     

     


     이 코드의 문제점은 

    1. 시험 점수의 범위를 0 ~ 100 사이의 값이 아닌 다른 값들 또한 계산해버린다.

    2. 한 번만 사용하면 끝이다! 예를 들어 반복해서 결과를 알고 싶다면 실행을 계속 눌러야하는 번거러움이 있다. 

     

     

    위 2가지 문제의 해결책으로 if와 while을 이용해서 문제점을 개선해 나아가보겠습니다.

     

    2번의 문제점은 while을 이용해 비교적 쉽게 해결가능합니다.

    while(true)

    를 사용해 무한루프를 돌려주면 끝! 와아~ 해결!

     

    1번의 문제점은 저의 머리속에는 if문을 이용해 제어하면 되겠네!! 라는 생각이 들었습니다.

     

    그래서 아래와 같은 조건을 붙였습니다! 하지만 이것 또한 문제점이 있었으니...

    if(!(0<=kor1&& kor1<=100))
    
    if((0>kor1 || kor1 > 100))
    
    

     

    그건 바로..

    위와 같이 국어1 점수를 1000이라고 입력을 했음에도 불구하고, 한 번밖에 오류를 잡아주지 않는다는 것입니다ㅜㅜ

     

    이것이 이번 포스트에서 알고가야 할 if와 while의 차이입니다!여러분!!

     

    If문을 쓴다면 한번 밖에 걸러지지 않지만, while을 쓴다면 조건이 만족할때 까지 여러번, 평생! 스스로 돌게됩니다.

     

    아닛! 그러면 if문을 이용해서는 while처럼 이용할 수 없는건가요?? 라는 질문이 들어올 수 도 있겠네요! 후훗

     

    if문을 while처럼 사용하고 싶다면..! 방법이 있습니다!

    if((0>kor1 || kor1 > 100)){
     System.out.print("성적범위(1~100)을 벗어났습니다.");
    

     위와 같은 코드를 무한번 써주시면 됩니다!! 하하하하하하핳하하흐후쿠쿠쿠쿠쿸쿠ㅜㅋ쿸쿠 

     

    이런 방법은 안쓰시겠죠?? 네네 하지마세요~ w.h.i.l.e 을 쓰시면 됩니다!

     

     

    요로케 만들어진 최종적인 코드는??

    package ex07.control1;
    
    import java.util.Scanner;
    
    public class Program {
    
    	public static void main(String[] args) {
    		
    		int kor1, kor2, kor3;
    		int total;
    		float avg;
    		
    		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("국어1:");
    		kor1 = scan.nextInt();
    
    		
    		//if(!(0<=kor1&& kor1<=100))
    		//if((0>kor1 || kor1>100)) {	
    		while((kor1<0 || 100<kor1)){
    		System.out.println("성적범위(0~100)를 벗어났습니다.");
    		
    		System.out.println("국어1:");
    		kor1 = scan.nextInt();
    		}
    		
    		
    		System.out.println("국어2:");	
    		kor2 = scan.nextInt();
    		
    		System.out.println("국어3:");
    		kor3 = scan.nextInt();
    		
    		
    
    		//-----성적 출력 부분-------------------
    		
    		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");
    		}
    	}
    }
    
    
    

     

    짠! 이렇게 됩니다

    위 코드의 결과 값 0~100 사이의 값들을 입력하지 않으면 계속 돌아가게 된다

     

    위의 코드를 보고 조금은 비효율적이라고 생각되는게 있으신가요??

     

    위에 대한 답은 뉴렉처님 자바강의 28강에서 보시면 됩니다!

     

    그럼 안녕! 

     

     

     

     

     

    '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] 배열의 중요성  (0) 2021.02.26

    댓글

Designed by Tistory.