서노썬
sun noes sun
서노썬
전체 방문자
오늘
어제
  • 카테고리 (142)
    • Java (89)
      • Day1 (20)
      • Day2 (16)
      • Day3 (4)
      • Day4 (5)
      • Day5 (2)
      • Day6 (2)
      • Day7 (4)
      • Day8 (6)
      • Day9 (3)
      • Day10 (0)
      • Day11 (0)
      • Day12 (0)
      • Day13 (3)
      • Day14 (0)
      • Day15 (0)
      • Day16 (0)
      • Day19 (0)
      • Day20 (0)
      • Day21 (2)
      • Day22 (4)
      • Day23 (2)
      • Day24 (5)
      • Day25 (4)
      • Day27 (2)
      • Day28 (3)
      • Day29 (1)
      • Day30 (1)
      • Day31 (0)
      • Day32 (0)
      • Dat33 (0)
      • Day34 (0)
      • Day35 (0)
      • Day36 (0)
    • HTML (37)
      • Day36 (20)
      • Day37 (3)
      • Day38 (2)
      • Day39 (8)
      • Day40 (3)
    • SQL (4)
      • Day40 (4)
      • Day41 (0)
      • Day42 (0)
      • Day43 (0)
      • Day44 (0)
      • Day45 (0)
    • JSP (0)
      • Day46 (0)
      • Day75 (0)
    • PYTHON (0)
      • Day75 (0)
      • Day76 (0)
    • Photo (12)

블로그 메뉴

  • 홈
  • 방명록

인기 글

최근 글

태그

  • java자료형
  • 논리연산자
  • 자바자료형
  • java메뉴입력
  • 자바break
  • 자바연산자
  • 자바
  • Java
  • 자바continue
  • java데이터타입

티스토리

hELLO · Designed By 정상우.
서노썬

sun noes sun

Java/Day4

[Java] 삼항 연산자 & short circuit evaluation

2021. 11. 4. 12:28

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);
    }
}
Colored by Color Scripter
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);
    }
}
Colored by Color Scripter
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);
    }
}
Colored by Color Scripter
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);
    }
}
Colored by Color Scripter
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
    'Java/Day4' 카테고리의 다른 글
    • [Java] 사용자 정의 메소드 & 예문
    • [Java] 비트 연산자
    • [Java] 데이터 타입. 자료형에 따른 연산
    • [Java] switch case 구문

    티스토리툴바