1. 삼항 연산자
- 항이 3개가 필요하여 삼항 연산자라고 하며, '조건 연산자'라고도 한다.
1
2
3
4
5
6
7
8
9
10
|
class Test
{
public static void main(String[] args)
{
int bigNum = 0;
int num1 = 5, num2 = 3;
bigNum = num1 > num2 ? num1 : num2;
System.out.println(bigNum);
}
}
|
cs |
- 출력값
5
- 항1 : num1 > num2
- 항2 : ? num1
- 항3 : : num2
- ? 앞에 있는 값이 참이면 num1이 bigNum에 들어가고, 거짓이면 num2가 들어간다.
(2) 삼항 연산자 예문
- 삼항 연산자를 이용하여 임의의 숫자 입력받아 절댓값 구하기.
1
2
3
4
5
6
7
8
9
|
class Test
{
public static void main(String[] args)
{
int a=-6, b=0;
b = a>0 ? a : -a;
System.out.println(b);
}
}
|
cs |
2. short circuit evaluation
(1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class Test
{
public static void main(String[] args)
{
int num1=0, num2=0;
i(f(num1=num1+10) > 10 && (num2=num2+10) > 10)
System.out.println("Good");
if((num1=num1+10) > 10 || (num2=num2+10) > 10)
System.out.println("Nice");
System.out.println("num1="+num1+"num2="+num2);
}
}
|
cs |
- 출력값
Nice
num1=20 num2=0
- && : 앞의 값이 거짓이면 전체를 거짓으로 판단하기 때문에 앞의 조건이 거짓이라면 뒤의 값은 실행되지 않고 식을 종료한다.
- || : 앞의 값이 참이면 전체를 참으로 판단하기 때문에 앞의 조건이 참이라면 뒤의 값은 실행되지 않고 식을 종료한다.
(num1=num+10) > 10 에서 num1=10이 되었고 10보다 크지 않다. 그렇기 때문에 if문의 조건은 앞의 식에서 거짓이 되고 뒤의 식은 실행되지 않고 종료된다. num1=10, num2=0 의 상태에서 식은 종료되고 if문이 거짓이기 때문에 아래의 출력문은 실행되지 않는다.
위의 if문에서 num1=10의 값을 갖게 되었고 아래의 if문 (num1=num1+10) > 10 에서 num1=10+10=20으로 10보다 값이 크기 때문에 조건은 참이 된다. 또한 앞의 조건이 참이기 때문에 이미 전체 식을 참으로 판단하고 (num2=num2+10) > 10에 대한 결과는 실행되지 않아 num2=0의 값이 유지된다.
그리고 결과가 참이기 때문에 아래의 출력문 Nice가 출력된다.
(2)
1
2
3
4
5
6
7
8
9
10
11
12
|
class Test
{
public static void main(String[] args)
{
int i=0, j=0;
while(i++<10 || j++<10)
{}
System.out.println("i=" + i + " j=" + j);
}
}
|
cs |
- while의 조건문 안에서 i=0의 값으로 i++<10 가 만족되어 식에 대한 전체 조건이 참이된다. 조건의 값이 참이 되므로 {} 사실 내용은 없지만 중괄호를 실행하게 되고 다시 while 조건으로 돌아간다.
> i=1, j=0
다시 i=1의 상태에서 i++되고 i++<10 만족되기 때문에 뒤의 j++에 대한 식은 판단되지 않고 전체의 식에 대해 참으로 보고 다시 중괄호 실행하고 while조건으로 돌아간다.
> i=2, j=0
다시 i=2의 상태에서 i++되어 i=3이 되고 i++<10 만족되기 때문에 뒤의 j++에 대한 식은 판단되지 않고 전체의 식에 대해 참으로 보고 다시 중괄호 실행하고 while 조건으로 돌아간다.
> i=3, j=0
(생략)
다시 i=10의 상태에서 i++되어 i=11이 되고 i++<10 만족되지 않기 때문에 이제 뒤의 식을 판단하러 들억가게 된다. 이 때 j=0의 값에서 j++되어 j=1의 값을 가지고 j++<10을 만족하기 때문에 전체 식을 참으로 판단한 후 {} 중괄호를 실행하고 while 조건으로 돌아간다.
> i=11, j=1
다시 i=11, j=1의 상태에서 i++되어 i=12가 되고 식은 거짓이 되어 뒤의 식을 판단. 이 때 j=1에서 j++되어 식을 만족하기 때문에 {} 실행하고 while로.
> i=12, j=2
(생략)
다시 i=20, j=10의 상태에서 i는 i++되어 21, 거짓. j=10의 상태에서 j++ 되어 11, 거짓.
i=21, j=11일 때에 전과 후의 식이 모두 거짓이기 때문에 식이 만족되지 못해 빠져나가게 되고 아래의 출력문이 실행된다.
'Java > Day4' 카테고리의 다른 글
[Java] 사용자 정의 메소드 & 예문 (0) | 2021.11.04 |
---|---|
[Java] 비트 연산자 (0) | 2021.11.04 |
[Java] 데이터 타입. 자료형에 따른 연산 (0) | 2021.11.04 |
[Java] switch case 구문 (0) | 2021.11.03 |