JAVA

삼항 연산자 (조건 연산자)

태로미 2023. 2. 6. 20:20

 

 

 

 

 

▶▶   삼항 연산자 (조건 연산자)  ?    : 

–  피연산자가 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

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