ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 008. 조건/삼항 연산자 , 실행 흐름의 컨트롤(조건문, 분기문,제어문)if, if~else 실습
    SsY/Class 2023. 2. 19. 21:23
    728x90

    2023.02.03 (금)

    조건 연산자 == 삼항 연산자 실습
    더보기
    /*================================================
    	   ■■■ 연산자 (Operator) ■■■
    	   - 조건 연산자 == 삼항 연산자
    =================================================*/
    
    // 사용자로부터 임의의 정수를 입력받아
    // 입력받은 정수가 양수인지, 음수인지, 영인지 구분하여
    // 이 결과를 출력하는 프로그램을 구현한다
    // 단, 입력 데이터는 BufferedReader 를 활용하고,
    // 조건 연산자(삼항 연산자)를 활용하여 기능을 구현할 수 있도록 한다.
    
    // 실행 예)
    // 임의의 정수 입력 : -14
    // -14 → 음수
    // 계속하려면 아무 키나 누르세요...
    
    // 임의의 정수 입력 : 479
    // 479 → 양수
    // 계속하려면 아무 키나 누르세요...
    
    // 임의의 정수 입력 : 0
    // 0 → 영
    // 계속하려면 아무 키나 누르세요...
    
    // ※ 문제 인식 및 분석 : 조건 연산자 중첩
    
    import java.io.IOException;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    public class Test028
    {
    	public static void main(String[] args) throws IOException
    	{
    		int n;
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		
    		System.out.print("임의의 정수 입력 : ");
    		n = Integer.parseInt(br.readLine());
    
    		String ans = ( n > 0 ) ? "양수" : ( n < 0 ) ? "음수" : "영";
    
    		System.out.printf("%d → %s\n", n, ans);
    	}
    }
    
    // 실행 결과
    
    /*
    임의의 정수 입력 : 0
    0 → 영
    계속하려면 아무 키나 누르십시오 . . .
    
    임의의 정수 입력 : 123
    123 → 양수
    계속하려면 아무 키나 누르십시오 . . .
    
    임의의 정수 입력 : -132
    -132 → 음수
    계속하려면 아무 키나 누르십시오 . . .
    
    */

    삼항연산자 중첩은 이전 글 007 번 Test027 번 더보기 1번 확인


    • Test029
      - 조건 연산자 == 삼항 연산자
    더보기
    /*================================================
    	   ■■■ 연산자 (Operator) ■■■
    	   - 조건 연산자 == 삼항 연산자
    =================================================*/
    
    // 사용자로부터 임의의 문자 하나를 입력받아
    // 대문자이면 소문자로..., 소문자이면 대문자로...
    // 알파벳이 아닌 문자라면 그 문자 그대로... 출력하는 프로그램을 구현한다.
    
    // 실행 예)
    // 한 문자 입력 : A
    // A → a
    // 계속하려면 아무 키나 누르세요...
    
    // 한 문자 입력 : b
    // b → B
    // 계속하려면 아무 키나 누르세요...
    
    // 한 문자 입력 : 7
    // 7 → 7
    // 계속하려면 아무 키나 누르세요...
    
    import java.io.IOException;
    public class Test029
    {
    	public static void main(String[] args) throws IOException
    	{
    		char ch1, ch2;
    		System.out.print("한 문자 입력 : ");
    		ch1 = (char)System.in.read();
    
    		ch2 = ch1 >= 'A' && ch1 <= 'Z' ? (char)(ch1 +32) : ch1>='a' && ch1<='z' ? (char)(ch1-32) : ch1;
    		
    		System.out.printf("%c → %c \n", ch1, ch2);
    
    	}
    }
    ※ System.in. read() 의 경우
    ASCII 코드 값. 즉, '상수'의 값으로 담아오기 때문에 값을 int형을 기본으로 한다
    따라서, 형 변한 규칙에 위배되어 char 타입에 자동으로 담을 수 없다.
    --> 강제 형 변환을 통해 담을 수 있도록 만들어 줄 필요가 있다.

    • Test030
      - 조건 연산자 == 삼항 연산자
      - 평년/윤년 출력 프로그램 구현하기
    더보기
    /*================================================
    	   ■■■ 연산자 (Operator) ■■■
    	   - 조건 연산자 == 삼항 연산자
    =================================================*/
    
    // 사용자로부터 임의의 연도를 입력받아
    // 입력받은 연도가... 윤년인지 평년인지 판별하여
    // 그 결과를 출력하는 프로그램을 구현한다.
    
    // 단, 입력은 BufferedReader 를 활용하고
    // 조건 연산자를 활용하여 연산을 수행할 수 있도록 한다.
    
    // 실행 예)
    // 임의의 연도 입력 : 2000
    // 2000년 → 윤년
    // 계속하려면 아무 키나 누르세요...
    
    // 임의의 연도 입력 : 2012
    // 2012년 → 윤년
    // 계속하려면 아무 키나 누르세요...
    
    // 임의의 연도 입력 : 2023
    // 2023년 → 평년
    // 계속하려면 아무 키나 누르세요...
    
    // ※ 2월이 28일까지 있는 해 → 평년
    //         29일까지 있는 해 → 윤년
    
    // ※ 윤년의 판별 조건
    //	  연도가 4의 배수이면서 100의 배수가 아니거나
    //	  400의 배수이면 윤년
    //	  그렇지 않으면 평년
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    
    public class Test030
    {
    	public static void main(String[] args) throws IOException
    	{
    		//BufferedReader 클래스 기반 인스턴스 생성
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		
    		int year;					//-- 사용자가 입력한 연도를 담아낼 변수
    		String strResult;			//-- 판별 결과를 담아낼 변수
    
    		System.out.print("임의의 연도 입력 : ");
    		year = Integer.parseInt(br.readLine());
    
    		// 연도가 4의 배수		연도가 100의 배수가 아님		연도가 400의 배수
    		// year%4==0	이면서	      year%100!=0		  또는	year%400==0
    		// year%4==0	&&		      year%100!=0			||	year%400==0
    
    		strResult = (year%4==0 && year%100!=0 || year%400==0) ? "윤년" : "평년";
    
    		System.out.printf("%d년 → %s\n", year, strResult);
    
    	}
    }
    
    // 실행 결과
    /*
    임의의 연도 입력 : 5608
    5608년 → 윤년
    계속하려면 아무 키나 누르십시오 . . .
    */
    
    /*
    임의의 연도 입력 : 2020
    2020년 → 윤년
    계속하려면 아무 키나 누르십시오 . . .
    */

    실행 흐름의 컨트롤
    - 실행 흐름 컨트롤 구문 == 컨트롤 제어 구문 == 조건문 == 분기문
    • Test031
      - if 문
      - if ~ else 문
    // 1. 프로그램을 작성할 때 주어진 조건에 따라
    // 분기 방향을 정하기 위해 사용하는 제어문에는
    // if문,if ~ else 문, 조건 연산자(삼항 연산자), 복합 if 문(if 문 중첩), switch 문이 있다.

    // 2. if 문은 if 다음의 조건이 참일 경우
    // 특정 영역의 문장을 수행하고자 할 때 사용되는 구문이다.
    • if
      if ~ else 설명
    더보기
    if ( 조건식 )          //-- 삼항 연산자의 수식1과 같음. 즉,  True or False 의 결과 값을 나타냄
    {
    // if 수행 영역        //-- 단독으로 사용 가능. true의 경우 if를 수행 false의 경우 if를 건너 뛰고 else 영역으로 내려가게 된다.
    }
    else 
    {
    // else 수행 영역      //-- 단독 사용 불가능. if 의 조건 false의 결과 값이 내려와 수행 가능. 조건에 맞지 않는 결과로 모여있기 때문에 괄호가 필요 없음 
                          // *주의* 즉, if 에 선언 된 것은 else에는 적용 x 
    }
    // 여기                //-- 조건의 만족 여부에 따라서 하나만 실행!
    
    ※ if 는 단독 사용이 가능 하며, if 문끼리도 중첩이 가능하다.
    ※ if와 else 구문도 중첩 가능하다!
    
    단, if() ~ else는 하나의 문장이다?
     1. else 단독 사용 불가능
                    ┌ '그' 가 가리키는 대상이 있어야 하기 때문에 단독 사용 불가능!
          ┌만약에  ┌그 이외에
       ( if 그리고 else )
       
     2. if() 와 else 사이에 다른 문장이 삽입될 수 없다
     if
     {
     }
    //-----------------문장 삽입 불가!!!!---------------------
    else
    {
    }
    • 실습
      - if, if~else 구문의 주의 사항
    더보기
    /*================================================
    	 ■■■ 실행 흐름의 컨트롤 (제어문) ■■■
    	   - if문
    	   - if ~ else 문 실습
    =================================================*/
    
    // 사용자로부터 이름, 국어점수, 영어점수, 수학점수를 입력받아
    // 다음과 같은 형태로 출력하는 프로그램을 구현한다.
    // 등급은 평균 점수를 기준으로 처리한다.
    
    // 90점 이상            :A
    // 80점 이상 90점 미만  :B
    // 70점 이상 80점 미만  :C
    // 60점 이상 70점 미만  :D
    // 60점 미만            :F
    
    // 단, BufferedReader 를 활용하여 데이터를 입력받을 수 있도록 하며,
    // print()메소드를 활용하여 출력할 수 있도록 한다.
    
    // 실행 예)
    // 이름 입력 : 행성
    // 국어 점수 : 90
    // 영어 점수 : 80
    // 수학 점수 : 70
    
    // >> 당신의 이름은 행성 입니다.
    // >> 국어 점수는 90,
    // >> 영어 점수는 80,
    // >> 수학 점수는 70,
    // >> 총점은 240이고, 평균은 80입니다.
    // >> 등급은 B 입니다.
    // 계속하려면 아무 키나 누르세요...
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    
    public class Test031
    {
    	public static void main(String[] args) throws IOException
    	{
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    		String name, strScore;
    		int nKor, nEng, nMat, nTot;
    		double nAverage;
    
    		System.out.print("이름 입력 : ");
    		name = br.readLine();
    		System.out.print("국어 점수 : ");
    		nKor = Integer.parseInt(br.readLine());
    		System.out.print("영어 점수 : ");
    		nEng = Integer.parseInt(br.readLine());
    		System.out.print("수학 점수 : ");
    		nMat = Integer.parseInt(br.readLine());
    
    		nTot = nKor + nEng + nMat;
    		nAverage = nTot / 3.0;
    
    		System.out.printf(">> 당신의 이름은 %s 입니다.\n", name);
    		System.out.printf(">> 국어 점수는 : %d\n", nKor);
    		System.out.printf(">> 영어 점수는 : %d\n", nEng);
    		System.out.printf(">> 수학 점수는 : %d\n", nMat);
    		System.out.printf(">> 총점은 %d이고, 평균은 %.1f입니다.\n", nTot, nAverage);
    
    			if(nAverage >= 90)
    				System.out.printf(">> 등급은 A 입니다.\n");
    			else if(nAverage >= 80)
    				System.out.printf(">> 등급은 B 입니다.\n");
    			else if(nAverage >= 70)
    				System.out.printf(">> 등급은 C 입니다.\n");
    			else if(nAverage >= 60)
    				System.out.printf(">> 등급은 D 입니다.\n");
    			else
    				System.out.printf(">> 등급은 F 입니다.\n");
                    
                // ※ if 와 else 구문 내에 수식이 한 줄 일 때는 블레이스{} 생략 가능!
    	}
    }
    // 실행결과
    /*
    이름 입력 : 행성c
    국어 점수 : 80
    영어 점수 : 90
    수학 점수 : 100
    >> 당신의 이름은 행성c 입니다.
    >> 국어 점수는 : 80
    >> 영어 점수는 : 90
    >> 수학 점수는 : 100
    >> 총점은 270이고, 평균은 90.0입니다.
    >> 등급은 A 입니다.
    계속하려면 아무 키나 누르십시오 . . .
    */

    ※ 상기 식에서 if~else 구문만 발췌하여 아래와 같은 주의 사항을 확인해볼 수 있다.

    if(nAverage >= 90)
    	System.out.printf(">> 등급은 A 입니다.\n");
    else if(nAverage >= 80)
    	System.out.printf(">> 등급은 B 입니다.\n");
    else if(nAverage >= 70)
        System.out.printf(">> 등급은 C 입니다.\n");
    else if(nAverage >= 60)
    	System.out.printf(">> 등급은 D 입니다.\n");
    else if(nAverage < 60)
    	System.out.printf(">> 등급은 F 입니다.\n");
    //--==>> 에러 발생 (컴파일 에러)
    //       초기화 되지 않은 변수를 사용할 때, 구문이 if 문으로 끝나면
    //       해당 조건들에 전부 맞지 않을 때, 어떤 값을 넣어야 할 지 모르기 때문에
    //		 아무리 논리적으로 맞아보여도 컴파일 에러를 발생시킨다.
    
    //--==>> 해당 에러를 없애는 방법에는
    //       1. if~else 구문으로 처리를 한다.
    //       - 모든 조건에 맞지 않을 때, else로 처리할 수 있게 도와준다.
    //       2. if 문으로 처리할때, 해당 변수의 값을 미리 초기화 해둔다.
    //       - 모든 조건에 맞지 않을 때, 해당 변수의 초기화 값으로 처리할 수 있게 도와준다.
    //       ex) int nAverage = 0;

    • Test032
      - if문
      - if ~ else 문 실습
    더보기
    /*================================================
    	 ■■■ 실행 흐름의 컨트롤 (제어문) ■■■
    	   - if문
    	   - if ~ else 문 실습
    =================================================*/
    
    // 사용자로부터 임의의 정수를 입력받아
    // 홀수 / 짝수를 판별하는 프로그램을 구현한다.
    // 단, 단일 if 구문을 활용하여 처리할 수 있도록 한다.
    
    //실행 예)
    // 임의의 정수 입력 : 20
    // >> 20은(는) 짝수입니다.
    // 계속하려면 아무 키나 누르세요...
    
    //실행 예)
    // 임의의 정수 입력 : 97
    // >> 97은(는) 홀수입니다.
    // 계속하려면 아무 키나 누르세요...
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    
    public class Test032
    {
    	public static void main(String[] args) throws IOException
    	{
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    		int n; // 임의의 정수
    
    		System.out.print("임의의 정수 입력 : ");
    		n = Integer.parseInt(br.readLine());
    
    		if (n%2==0)
    		{
    			System.out.printf(">> %d은(는) 짝수 입니다.\n",n);
    		}
    		if (n%2!=0)
    		{
    			System.out.printf(">> %d은(는) 홀수 입니다.\n",n);
    		}
    
    	}
    }

     

    // 개인적 감상

    더보기

    간단한 구문이면서도 실수하기 쉬운 구문이라는 말을 체감했다.

    if 와 if~else 를 중첩해서 많이 사용하게 된다고 하셨는데, 이런 사소한 실수에서 나올 수 있는 에러들을 관찰하며 최대한 작성하면서 컴퓨터의 시선으로(?) 구문을 작성하는 습관을 들여야겠다.

    728x90
Designed by planet-si