개발/코딩스터디

[JAVA 기초] 조건문

차파랑 2021. 10. 13. 23:29

0. Boolean
    - 비교의 결과. 참(True) 혹은 거짓(False)

1. if문
1) if
- 조건이 참(True)일 때 해당하는 코드를 실행한다.
- 때문에 조건 위치에는
1) boolean 자료형이나,   ( ex true, false, boolean x )
2) 연산 결과가 boolean인 연산,     ( ex 비교연산자의 연산 4>5 )
3) 반환 값이 boolean인 메서드 등이 들어올 수 있다.     ( ex equals() )

void ifMethod1() {
  boolean condition = true;
    if ( condition ) {
        System.out.println(“조건문의 조건이”);
        System.out.println(“참이면”);
        System.out.println(“실행하는 코드”);
    }
    System.out.println(“조건문의 밖”);
    System.out.println(“조건이 참인지 거짓인지 상관 없이 실행”);
  }
void ifMethod2 () {
  if ( 4 > 5 )
      System.out.println(“조건이 참일 때 실행하는 코드가 한 줄일 땐 중괄호 {} 생략 가능”);
  System.out.println(“조건문의 밖”);
  System.out.println(“조건이 참인지 거짓인지 상관 없이 실행”);
}


2) else
- 조건이 참일 때와 거짓일 때의 동작이 다른 경우 사용한다.
- if 없이 먼저 올 수 없다.
- 하나의 if 뒤에 오는 else는 없을 수 있지만, 여러개가 있을 수는 없다.

void ifElseMethod () {
  if ( condition ) {
      System.out.println(“조건이 참일 때 실행하는 코드”);
      System.out.println(“조건이 거짓일 때는 실행되지 않는다.”);
  } else {
      System.out.println(“조건이 거짓일 때 실행하는 코드”);
      System.out.println(“조건이 참일 때는 실행되지 않는다.”);
  }
}


3) else if
- 여러 개의 조건이 필요할 때 사용한다.
- if 없이 else if가 먼저 올 수는 없다.
- else 뒤에 else if가 올 수 없다.
- else if는 0개 이상이 올 수 있다.

void elseIfMethod (){
  if ( condition1 ) {
      System.out.println(“condition1이 참일 때 실행하는 코드”);
  } else if ( condition2 ) {
      System.out.println(“condition2이 참일 때 실행하는 코드”);
  } else if ( condition3 ) {
      System.out.println(“condition3이 참일 때 실행하는 코드”);
  } else {
      System.out.println(“위 세 조건이 모두 거짓일 때 실행하는 코드”);
  }
}


4) 조건문의 중첩
- if 내부에 if문을 사용할 수 있다.

void multiIfMethod () {
  if( condition1 ) {	
    System.out.println(“condition1이 참일 때 실행하는 코드”);
    if( condition2 ) {
      System.out.println(“condition1과 condition2가 모두 참일 때 실행하는 코드”);
    }
    System.out.println(“condition1이 참일 때 실행하는 코드”);
  }
}


2. switch문
1) switch
- if문으로 완전히 대체가 가능한 조건문이다.
- 조건이 많을 때 보다 명료하게, 읽기 편하게 표현할 수 있다는 장점이 있다.
- variable에 올 수 있는 자료형은 다음과 같다.
byte, short, char, int, enum
- variable에 올 수 있는 class는 다음과 같다. wrapper class 자세히
String, Character, Byte, Short, Integer

void switchMethod () {
  switch ( variable ) {
  case variable1:
  	System.out.println(“variable이 variable1과 같을 때 실행되는 코드”);
  case variable2:
  	System.out.println(“variable이 variable2와 같을 때 실행되는 코드”);
  }
}

- 위 예제 코드의 문제점은 variable이 variable1일 때 결과가 다음과 같다는 점이다.

<output>
variable이 variable1과 같을 때 실행되는 코드
variable이 variable2와 같을 때 실행되는 코드


2) break
    switch는 상위 케이스에서 입력변수와 같은 값을 발견하면, 해당 케이스와 함께 하위 케이스에 해당하는 코드가 모두 실행된다는 문제가 있었다.
    주로 반복문을 제어하는 데 쓰이지만, switch를 사용할 때 역시 필수적으로 사용한다.

void switchBreakMethod () {
  switch ( variable ) {
  case variable1:
  	System.out.println(“variable이 variable1과 같을 때 실행되는 코드”);
  	break;
  case variable2:
  	System.out.println(“variable이 variable2와 같을 때 실행되는 코드”);
  	break;
  }
}

    위와 같이 break문을 사용하면 variable이 variable1과 같이 상위 케이스와 같다 하더라도 해당하는 케이스의 코드만 실행된다.

<output>
variable이 variable1과 같을 때 실행되는 코드


3) default
  케이스의 최하단에 오며, variable이 모든 케이스에서 걸리지 않았을 때 실행되는 코드를 표현한다. if의 else와 같은 역할을 한다.

void switchDefaultMethod () {
  switch ( variable ) {
  case variable1:
    System.out.println(“variable이 variable1과 같을 때 실행되는 코드”);
    break;
  case variable2:
    System.out.println(“variable이 variable2와 같을 때 실행되는 코드”);
    break;
  default:
    System.out.println(“variable이 variable1, variable2 중 같은 것이 없을 때 실행되는 코드”);
  }
}

 

# 어떻게 실수할 수 있을까

  if - else if 문의 경우, 상위 조건에서 참이 나오면 하위 조건은 확인하지 않는다. 분기문을 설계할 때 종종 반드시 확인해야 하는 조건들이 생기곤 하는데, 이럴 때 if - else if를 사용하게 되면 일부 조건은 확인되지 않을 수 있다. 때문에 if문을 여러개 사용할 것인지, if - else if를 사용할 것인지 신중하게 판단할 필요가 있다.

 x가 0보다 크면 "x > 0", y가 x 보다 크면 "y > x"를 출력하는 프로그램이다. 두 조건은 양립 가능하기 때문에 두 문장 모두 출력될 수 있다. 아래와 같이 x가 10이고 y가 20이면 두 조건 모두 만족하기 때문에 두 문장 모두 출력되는 것이 의도한 바다. 그러나 exampleMethod1()에서는 "x > 0"만 출력한다.

void exampleMethod1 () {
    int x = 10;
    int y = 20;
    if(x > 0) 
    	System.out.println("x > 0");
    else if (y > x)
    	System.out.println("y > x");
}

<output>
x > 0

  의도한 대로 실행하기 위해서는 아래와 같이 if문을 두 개 사용해야 한다.

void exampleMethod2 () {
    int x = 10;
    int y = 20;
    if(x > 0) 
    	System.out.println("x > 0");
    if (y > x)
    	System.out.println("y > x");
}

<output>
x > 0
y > x

 

 

# 문제: 윤년, 알람시계

 

2753번: 윤년

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서

www.acmicpc.net

 

2884번: 알람 시계

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,

www.acmicpc.net

 

# 출처

1. Java - 조건문 (1/4) : if #
2. Java - 조건문 (2/4) : else #
3. Java - 조건문 (3/4) : 조건문의 응용 #
4. Java - 조건문 (4/4) : 조건문의 중첩 #
5. Java - 조건문 5 : switch #