-
008. 조건/삼항 연산자 , 실행 흐름의 컨트롤(조건문, 분기문,제어문)if, if~else 실습SsY/Class 2023. 2. 19. 21:23728x90
2023.02.03 (금)
조건 연산자 == 삼항 연산자 실습
- Test028
- 조건 연산자 == 삼항 연산자
- 조건 연산자의 중첩
더보기/*================================================ ■■■ 연산자 (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'SsY > Class' 카테고리의 다른 글
010. 실행 흐름의 컨트롤(반복문) while, do~while, for + while문 실습 (1) 2023.02.23 009. if, if~else문 실습 , Switch 문 + 실습 (3) 2023.02.20 007. 자바의 입출력 print, Scanner, 실수 정밀도, 키보드 주요 특수문자 영문이름, + 연산자 실습 (1) 2023.02.18 006. 클래스명 표기법, BufferedReader, System.in.read/skip() 실습 (0) 2023.02.17 005. 비트 연산자, 변수와 자료형 / 키워드 및 식별자 / 연산자 실습, final(상수화) (0) 2023.02.15 - Test028