본문 바로가기

자바/뇌를 자극하는 JAVA

if 조건문

if 조건문

조건에 따라 데이터를 처리 할 수 있습니다. 그런 명령문을 조건문이라고 합니다.

조건문은 if 키워드나 switch 키워드를 가지고 만들 수 있습니다.


if 문의 기본 형식 첫번째

 if ( 조건식 )  -> 조건식은 true 또는 false 값을 산출 할 수 있는 식

      명령문    -> 조건식이 true일 때만 실행되는 명령문

ex) 

if (num1 > num2)

 System.out.println("num1 값이 더 큽니다.");


if 문의 기본 형식 두번쨰

 if ( 조건식 )  -> ture 또는 false 값을 산출할 수 있는 식

      블록       -> 조건식이 true 일때만 실행되는 블록(블록이란 명령어를 여러개 모아놓은 것을 뜻합니다.)

ex)

if (num1 > num2) {

 System.out.println("num1 값이 더 큽니다.");

 System.out.println(num1);

}


if 문을 else 키워드와 함께 사용하는 방법

if 명령문에서 조건을 만족하지 않을 때 해야할일을 기술 할 수도 있습니다.

if-else 문의 기본 형식

if ( 조건식 )  -> 조건식이 true 또는 false 값을 산출 할 수 있는 식

    실행부분  -> 조건식이 true일 때만 실행 되는 명령문

else

    실행부분  -> 조건식이 false일 때만 실행 되는 명령문


여기서 실행부분은 단일 명령문일 수도 있고 블록일 수도 있습니다.

ex) 

if ( num1 > num2 )

 System.out.prinntln("num1 = " + num1 );

else

 System.out.println("num2 = " + num2);


if 문 안에 포함된 if 문

if 문은 다른 if 문을 포함할 수도 있습니다. 

ex)

if ( num1 > num2 )   

 if ( num1 > num3 )

  System.out.println("num1이 제일 큽니다."); -> num1이 클 때만 메시지를 출력합니다.(위의 조건문을 모두 만족하였을때만 출력합니다.)


dangling else와 else if 절

그런데 if 문 안에 if 문이 있고, else 키워드까지 사용되면 문제가 좀 복잡해집니다. 다음 if 문의 경우를 봅시다.


if ( num1 > num2 )

 if ( num1 > num3 )

  System.out.println("num1 = " + num1 );

 else

  System.out.println("num2 = " + num2 );


여기서 else는 가장 가까운 윗줄에 있는 if 키워드와 짝을 이룹니다.

 dangling else 라는 말은 이렇게 if가 여러개 있을 때의 else를 말합니다. 

dangling의 사전적 의미는 달랑달랑 매달렸다는 의미입니다.


다음의 예제를 보면서 else 규칙을 알아 봅시다.

아래는 else규칙을 모르고 작성한 프로그램으로 'num = 173'이라는 결과가 출력되리라 기대하며 만든 프로그램입니다.

1        class Ifexmaple

2         public static void main(String args[]) {

3          int num1 = 152;

4          int num2 = 173;

5          if ( num1 > num2 )

6           if ( num1 > 100)

7            System.out.println("num1 = " + num1);

8          else

9           if ( num2 > 100 )

10          System.out.printnl("num2 = " + num2);

11         System.out.printnl("Done.");

12        }

13       }


결과

Done.


위의 프로그램에서 8번줄 else는 6번줄 if에 대해서만 작동하게 되지만 6번줄 if는 참이므로 거짓일때만 작동하는 8번줄 else는 작동하지 않습니다.

6번줄 if는 참이지만 5번줄 if가 거짓이므로 참일때만 작동하는 6번줄 if는 작동하지 않습니다.

처음보신다면 헷갈릴 수도 있지만 천천히 생각해보면 이해가 될것입니다.


아래는 본래의 의도대로 작동하도록 수정한 프로그램입니다.

1        class Ifexmaple

2         public static void main(String args[]) {

3          int num1 = 152;

4          int num2 = 173;

5          if ( num1 > num2 ) {

6           if ( num1 > 100)

7            System.out.println("num1 = " + num1);

8          }

9          else {

10          if ( num2 > 100 )

11          System.out.printnl("num2 = " + num2);

12         }

13         System.out.printnl("Done.");

14        }

15       }


결과

num2 = 173

Done.


위에서는 dangling else 규칙으로 인해 문제가 발생하는 예를 보여줬지만, 이와는 반대로 이 규칙을 잘 활용하면 다음과 같이 유용한 프로그램을 작성할 수도 있습니다.


class ifExample {

 public static void main(String args[] {

  int num = 74;

  if (num < 10)

   System.out.println("num의 값은 10미만입니다.");

  else if (num < 100)

   System.out.println("num의 값은 10이상, 100미만입니다.");

  else if (num < 1000)

   System.outprintln("num의 값은 100이상, 1000미안입니다.");

  else

   System.outprintln("num의 값은 1000이상입니다.");

 }

}


결과

num의 값은 10 이상, 100 미만입니다.


여기서는 else if 라는 하나의 키워드인 것처럼사용되고 있습니다.

'자바 > 뇌를 자극하는 JAVA' 카테고리의 다른 글

반복문  (0) 2013.04.28
switch 조건문  (0) 2013.04.28
배열의 선언, 생성, 이용  (0) 2013.04.28
여러 가지 대입문  (0) 2013.04.28
로컬 변수의 선언과 이용  (0) 2013.04.27