JAVA 2011. 5. 31. 00:34
컴퓨터가 기계보다 우수한 이유는 조건에 따라 일을 다르게 할 수 있기 때문이다.

자바에서는 if 문과 switch문으로 조건문을 만들 수 있다.

if 조건문

if 문은 두가지 형식으로 만들 수 있는데 블록이 있냐 없냐이다.

if ( 조건식)
   명령문         

예) if(num1 > num2)
      System.out.println("num1이 더 큽니다");

과 같이 블록이 없는 것과

if ( 조건식 ){
    명령문 
}
 

예) if(num1 > num2){
  System.out.println("num1이 더 큽니다"); 
      } 
과 같이 블록이 있는 것이다. 

if문은 조건식이 참일 때 아래를 수행한다. 

조건문을 만족하지 않을 때에도 일을 수 행하게 하려면 else를 쓰면된다

if(조건식){
  참일 때  명령문
}else{
  거짓일 때 명령문 
}
 
과 같이 사용하면 참 과 거짓일 때를 구분하여 두가지 일을 수행할 수 있다.

if문에 if문을 또 한번 쓸 수있다.

class ifTest {
public static void main(String args[]){
int num1 = 52;
int num2 = 24;
int num3 = 32;
if(num1 > num2) --> 1번
if(num1 > num3) --> 2번
System.out.println("num1이 제일 큽니다");
System.out.println("Done.");
}
}
위와 같이 쓰면 1번이 참이라면 안으로들어가 2번도 검사를 하고 2번도 참이라면 결과값이 출력된다.

dangling else

if문안에 if문사용은 가능하지만 거기다 else까지 넣으면 식이 복잡해진다.

if(num1 > num2)--> 1번
if(num1 > num3)--> 2번
System.out.println("num1이 제일 큽니다");
  else
System.out.println("Done.");

식이 위와 같다면 과연 else가 1번과 짝을 이루는 else인지 2번과 짝을이루는 else인지 

판단하기가 쉽지않은데 이런 else를 dangling else 라고 하는데 danging은

대롱대롱 매달리다라는 의미이다. 자바에선 이 dangling else을 가장 가까운 if문과

짝을 이루라는 규칙이 있기때문에 위에 예제의 2번 if문과 짝을 이루는 else이다.

class dangingelse {
public static void main(String args[]){
int num1 = 152;
int num2 = 173; 
if(num1 > num2) --> 1
if(num1 > 100) -->2
System.out.println("num1 = " + num1 );
else -->3
if(num2 > 100) -->4
System.out.println("num2 = " + num2 );

System.out.println("Done.");
}
}
위 예제는 dangling else를 모르는 사람이 짠

num1과 num2중에 큰 수가 100보다 클 때만 그 값을 출력하는 프로그램이다.

위 예제 에서보면 1을 거친 후 거짓이기 때문에 3번의 else로 빠지겠지 라고 생각하면

dangling else를 모르는거다, dangling else는 가장 가까운 if와 짝을 이루는 것이기 때문에

실질적으론 2번과 짝을 이루는 else이다 , 결과적으로 1번의 if문이 거짓으로 되면

그 안으로 타고들어가지 않고 바로 빠지게되는데 2번의 if문에 접근을 못하니 3번의

else도 당연히 접근을 못한다. 그러므로 1번이 거짓이 되면서 아래 나머지 연산은

모두 수행하지 않고 "Done" 만 찍힌다. 꼭 기억하자 꼭. 

else if 라는 것도 있는데 이는 if문 다음에 와서 다른 조건을 계속 나열하는 것이다 .

class elseif {
public static void main(String args[]){
int num1 = 74;
if(num1 < 10)
System.out.println("num1 = 10미만" );
else if(num1 < 100)
System.out.println("num1 = 10이상 100미만"  );
else if(num1 < 1000)
System.out.println("num1 = 100이상 1000미만"  );
else 
System.out.println("num1 = 100이상"  );
System.out.println("Done.");
}
}

위와 같이 if 다음으로 조건을 주어서 계속 값을 확인하고 그중에 하나라도 맞으면

안의 연산을 수행하고 빠져버린다. 값이 나왔다면 다음 연산을 수행하지 않는다. 

switch  

if문과 같이 식이 참일 때 수행을 하지만 문어다리처럼 여러가지 조건을 만들수 있다.

switch(식){

case 값1:
명령문
break; 

case 값2:
명령문
break;

case 값3:
명령문
break;

default:
명령문
break; 


()안의 식을 계산하고 나서 그에 맞는 값에 따라 case를 통과하고 break;를 만나서

빠져나온다. 식의 결과가 case문 중에 일치하는 문장이 없다면 default에 있는 명령문이

수행된다. 

break;문을 안써도 실행은 되는데 만약 3번 case문에 값을 안썼다면 식의 결과값이

값 3일 때 3번 case문의 명령문을 수행한후 break;가 없기 때문에 아래의 default의

명령문도 수행되어 버린다, 꼭 나쁜것만은 아니지만 깔끔하지 못하다.  

 

'JAVA' 카테고리의 다른 글

JAVA] 11. 매소드 호출문  (0) 2011.06.02
JAVA] 10. 반복문  (0) 2011.05.31
JAVA] 8. 배열의 선언, 생성, 이용  (0) 2011.05.28
JAVA] 7. 여러가지 대입문  (1) 2011.05.26
JAVA] 6. 로컬 변수의 선언과 이용  (0) 2011.05.25
posted by 젊은쎄오
: