삼항 연산자 (조건 연산자)
▶▶ 삼항 연산자 (조건 연산자) ? :
– 피연산자가 3개인 연산자
– 조건식의 판별 결과가 true일 때와 false일 때, 서로 다른 위치의 값(또는 식)을 선택하는 연산자.
– 조건식은 결과가 true 또는 false가 되는 식을 사용해야 함.
조건식 ? 값1(true일 때 선택) : 값(false일 때 선택);
EX1 ) 삼항연산자
1 ) 출력문에 바로 입력하기
int num = 0;
System.out.println(num>=0? "num은 양수" : "num은 음수");
→ num이 0이상일 경우 ture가 리턴되고, true에 해당하는 "num은 양수" 값을 선택하게 되어, 출력문에서 출력됨.
→ System.out.println("num은 양수"); 문장과 결과가 동일함.
✓ 'num은 양수'가 출력됨.
2 ) 대입연산자와 같이 사용하기
int num = 0;
String result = num>=0? "num은 양수" : "num은 음수";
System.out.println(result);
→ 대입연산자(=)가 연산 우선순위가 젤 낮기 때문에, 오른쪽의 삼항연산자를 먼저 계산하고 그 값을 좌변에 대입함.
✓ 'num은 양수'가 출력됨.
EX2 ) 삼항연산자 안에 삼항연산자 (2번 사용)
int num = 0;
result = num>0? "num은 양수" : num<0? "num은 음수" : "num은 0!";
System.out.println(result);
→ 말로 하나씩 풀어가면서 얘기해보기. 조건 안에 조건이라고 생각하면 됨.
→ num이 0보다 커서 결과값이 true가 된다면, 'num은 양수' 값이 선택됨.
→ num이 0보다 같거나 작아서 결과값이 false가 된다면, num>0 ? "num은 음수"' : "num은 0!" 이라는 조건식이 선택됨.
→ 다시 조건식을 봤을 때, 'num이 0보다 크지않은데' (앞의 조건) '그럼 num이 0보다 작은가?' (추가 조건)
✓ 추가 조건에서 결과가 true라면 'num은 음수' 값이 선택되고, false라면 'num은 0!' 값이 선택됨.
Q ) 삼항연산자를 사용하여 변수 ch에 담긴 문자가 대문자인지 소문자인지,
그것도 아니면 기타문자인지 판별하기.
A )
논리곱사용 → AND연산자
생각보다 컴퓨터는 똑똑해서 A → Z까지의 순서를 인지하고 있음.
처음에 난 컴퓨터가 A부터 Z까지 문자순대로 인지해서 비교할 수 없는 줄 알고...
아스키코드를 열심히 찾아서 하나하나 비교했었다^-^...ㅎ
char ch = 'A';
String str = 'A'<=ch && ch<='Z'? "대문자": 'a'<=ch && ch<='z'? "소문자":"기타문자";
System.out.println(str);
→ A다음은 B, B다음은 C처럼 알파벳의 순서를 이용해 대문자와 소문자, 그리고 이도저도 아닌건 기타문자로 분류함.
✓ ch변수에 'A'가 들어있는 지금은 '대문자'가 출력됨.
Q2 ) 뷔페 요금 계산하기
1. 뷔페의 기본요금(price)은 30,000원
2. 손님의 나이(age)에 따라 할인 조건이 적용
3. 할인 조건 : 나이(age)가 5세 이하일 경우, 70% 할인
나이(age)가 65세 이상일 경우, 50% 할인
4. 삼항연산자를 사용해서 최종적인 뷔페 요금을 출력
A1 ) 강제 형변환 사용
int price = 30000;
int age = 50;
int discount1 = (int)(30000*0.3);
int discount2 = (int)(30000*0.5);
System.out.println(age<=5? discount1:age>=65? discount2:price);
→ 70%할인값을 구하기 위해 30000*0.3을 하면, int * double = double이므로 좌변의 int타입과 맞지 않으므로,
int타입으로 강제 형변환을 시켜줌.
✓ age 변수 값의 조건에 따른 '30000'이 출력됨.
A2 ) 대입연산자 + 강제 형변환 사용
int price = 30000;
int age = 3;
int result;
result = age<=5? (int)(price*0.3) : age>=65? (int)(price*0.5) : price;
System.out.println(result);
→ 변수로 따로 빼지 않고, 삼항연산자 조건식에 바로 형변환하여 값을 넣음.
✓ age 변수 값의 조건에 따른 '9000'이 출력됨.
A3 ) 확장대입연산자 사용
int price = 30000;
int age = 70;
int result;
result = age<=5? price*=0.3:age>=65? price*=0.5:price;
System.out.println(result);
→ 확장대입연산자를 사용하여 (int)(price*0.3) 를 price *= 0.3 으로 바꿔줌, 이렇게 하면 형변환이 필요 없음.
✓ age 변수 값의 조건에 따른 '15000'이 출력됨.
A4 ) 삼항연산자 + 확장대입연산자 응용ver
int price = 30000;
int age = 30;
// price *= 0.3; // 5세 이하일 때
// price *= 0.5; // 65세 이상일 때
price *= age<=5? 0.3:age>=65? 0.5:1;
System.out.println(price);
→ 연산자 우선순위로 삼항연산자에서 먼저 계산하여 알맞은 조건값을 선택하고,
그 다음에 해당 조건값에다가 *= 확장연산자 계산됨.
→ 즉, 선택된 해당 조건값에 price를 곱한 값이 결국 price가 됨.
✓ age 변수 값의 조건에 따른 '30000'이 출력됨.
Comment

나도 분명 코드를 잘 짰다고 생각했는데
다른 사람들의 코드를 보니 이게 같은 문제가 맞나 싶을 정도로
정말 다양하고 가지각색이다! !!ㅎㅎㅋㅎㅎㅎ
신기하기도 하고~~배우는 것도 많고~~경우의 수가 많아 재밌당 힣힣ㅎㅎㅎ