2. METHOD AND CONDITION _06 CONDITION

jaegeunsong97·2022년 11월 17일
0

[Inflearn] 홍팍 자바

목록 보기
6/15

Condition

오늘은 뭘 먹지? 오늘은 어떤 옷을 입지? 등등.. 특정 상황에 따라, 다른 행동을 취해야 할 때가 있다. 프로그래밍 또한 마찬가지다. 특정 조건에 따라 결과를 달리할 필요가 있다. 이를 조건문(conditionals)이라 한다.

definition >> 상황에 따라 실행 흐름을 달리하는 문법. 이를 조건문이라 한다. 이를 사용하면 버스카드 요금을 나이로 정한다거나, 시험 점수에 따른 등급을 나눌 수 있다.

case >> 이러한 조건문의 대표적 종류로는 if / else / else-if 가 있다.

If

특정 동작을 하거나 말거나(do or nothing) 할 때, if 문을 사용한다.

if (조건식) {
  // 조건식이 참이면 수행할 내용
}

Else

조건에 따라 A or B를 수행할 때, else문을 사용한다.

if (조건식) {
  // A - 조건식이 참이면 수행할 코드
} else {
  // B - 거짓인 경우 수행할 코드
}

Else-if

3가지 이상의 흐름을 나눌 때, elseif 문을 사용한다. 약식 코드로 표현하면 아래와 같다.

if (90점이상?) {
  A 학점
} else if (80점 이상?){
  B 학점
} else {
  C 학점
}

Comparison

비교 연산자(comparison)는 두 값을 비교하여 참/거짓을 반환한다.

System.out.println(7 > 4); // 7은 4보다 큰가? => true
System.out.println(10 % 3 == 0); // 10을 3으로 나눈 나머지가 0인가? => false

Logic operator

논리 연산자는 새로운 참/거짓 결과를 만든다. 그 종류는 아래와 같다.

// AND 연산은 교집합이 있는 경우, true를 반환한다. 그 외는 모두 false.
if (남성인가? && 키가 173cm 이상인가?) {
  System.out.println("평균보다 큽니다.");
}
// OR 연산은 두 조건 중 하나라도 만족하면 true. 그 외는 false.
if (수학 90점 이상? || 영어 90점 이상?) {
  System.out.println("장학금 대상자입니다.");
}
// NOT 연산, 반대로 바꿈
System.out.println(!true); // false

1) if

codition >> 조건문을 사용하면, 상황에 따른 실행 흐름을 결정 할 수 있습니다.
structure >> if 문의 구조는 다음과 같습니다. 소괄호에 조건식이 들어가고, 이가 참인경우 수행할 내용을 중괄호 안에 적습니다.

if ( 조건식 ) {
  // 조건식이 참이면 수행할 내용 
}

example

// 변수 생성
int number = 102;
// number가 100이상이면?
if (number >= 100) {
  // 해당 number를 출력!
  System.out.println(number);
}

CODE

public class Beer {
  public static void main(String[] args) {
    order(18); // 18세가 캔맥주를 사려 함
    order(19); // 19세..
    order(20); // 20세..
  }
  public static void order(int age) {
    if (age >= 19) {
      System.out.printf("%d세, 성인인증 완료 => 캔맥주가 나왔습니다.\n", age);
    }
  }
}

2) if-else

if

// 참/거짓 변수 생성
boolean hungry = false;
// if 문 - 참이면 수행, 거짓은 생략!
if (hungry) {
  System.out.println("배고파, 밥먹자!");
}

if-else >>배가 고프면 밥을 먹고, 고프지 않다면 샐러드라도 먹어야 한다면 어떻게 해야 할까요? 둘 중 하나를 선택하는 즉, 양자택일의 경우 if-else 문을 사용합니다.

if ( 조건식 ) {
  // A: 참인 경우 수행!
} else {
  // B: 거짓 인경우 수행!
}

example

// 변수 생성
boolean hungry = false;
// 조건문 실행
if (hungry) {
  System.out.println("배고파, 밥먹자!");
} else {
  System.out.println("음.. 간단히 샐러드 먹자!");
}

CODE

public class Tobacco {
  public static void main(String[] args) {
    buy(15); // 15세, 담배 구매 시도
    buy(19); // 19세..
    buy(22); // 22세..
  }
  public static void buy(int age) {
    // 변수 생성
    String result = "";
    // 조건에 따른 결과 생성
    if(age >= 19) {
      result = "O";
    } else {
      result = "X"; 
    }
    // 결과 출력
    System.out.printf("%d세 => 담배판매(%s)\n", age, result);
  }  
}

3) else-if

if-else >> 우리는 앞서 if-else 문을 통해 양자 택일이 가능함을 배웠습니다. 아래 코드는 A 또는 F 학점을 주는 코드 예입니다.

// 변수 생성
int score = 86;
String grade = "";
// 조건에 따른 처리
if (score >= 95) {
  grade = "A";
} else {
  grade = "F";
}

else-if >> 만약 세 개 이상의 조건 중 하나를 선택하려면 어떻게 해야 할까요? 기존의 if-else 문 사이에 else-if 문을 추가하면 되겠습니다.

// A, B, C, F 학점을 주는 예
if (score >= 95) { // 95점 이상
  grade = "A";
} else if (score >= 90) { // 90점 이상
  grade = "B";
} else if (score >= 80) { // 80점 이상
  grade = "C";
} else {
  grade = "F";
}

CODE

public class BusCard {
  public static void main(String[] args) {
    printRole(22); // 22살 => 성인
    printRole(16); // 16살 => 청소년
    printRole(10); // 10살 => 어린이
    printRole(4); // 4살 => 유아
  }
  public static void printRole(int age) {
    // 변수 생성
    String role = "";
    // 조건별 결과 선택
    if (age >= 22) {
      role = "성인";
    } else if (age >= 16) {
      role = "청소년";
    } else if (age >= 10){
      role = "어린이";
    } else {
      role = "유아";
    }
    // 결과 출력
    System.out.printf("%d살 => %s입니다.\n", age, role);
  }
}

4) comparison and logic operator

더욱 풍부한 조건문 사용을 위해, 추가로 배워야 할 연산자가 있습니다. 바로 비교(comparison) 연산자와 논리(logical) 연산자입니다.
comparison >> 비교 연산자는 좌우 값의 크기를 비교하여 참/거짓을 반환하며, 그 종류는 아래와 같습니다.

// 비교 연산자 코드 예
System.out.println(7 > 4); // true
System.out.println(3 == 5); // false
System.out.println(5 != 10); // true
logical operator >> 논리 연산자는 좌우 논리값(/거짓)을 통해 새로운 논리값(/거짓)을 반환하며, 그 종류로 AND(&&) 연산자와 OR(||) 연산자가 있습니다.
// AND 연산자 - 양쪽 모두 만족하면, 참!
System.out.println(true && true); // true
System.out.println(true && false); // false
System.out.println(false && true); // false
System.out.println(false && false); // false
// OR 연산자 - 하나라도 만족하면, 참!
System.out.println(true || true); // true
System.out.println(true || false); // true
System.out.println(false || true); // true
System.out.println(false || false); // false

both of uses

// 변수 생성
double tall = 182;
// 조건문 처리 - 키가 176cm 이상이면서 185cm이하라면?
if ((tall >= 176) && (tall <= 185)) {
  System.out.println("♥︎_♥︎");
} else {
  System.out.println("-_-?");
}

CODE

public class Scholarship {
  public static void main (String[] args) {
    // 메소드 호출
    printTest("Park", 100, 92); // Park => 전액 장학금!
    /* 3. 모든 학생의 결과를 출력하시오. */
    printTest("Kim", 82, 96); // Kim => 반액 장학금!
    printTest("Choi", 82, 88); // Choi => 다음 기회에~
  }
  public static void printTest(String name, int math, int eng) {
    // 변수 생성
    String result = "";
    // 조건에 따른 값 변경
    if ((math >= 90) && (eng >= 90)) {
      result = "전액 장학금!";
    } else if ((math >= 90) || (eng >= 90)){
      result = "반액 장학금!";
    } else {
      result = "다음 기회에~";
    }
    // 결과 출력
    System.out.printf("%s => %s\n", name, result);
  }
}

5) overlap condition

조건문 속에 또 다른 조건문이 사용될 수 있습니다.

// 변수 생성
double weight = 50.6; // 50.6kg
boolean isMale = false; // 여성
// 남자?
if (isMale) {
  // 몸무게 평균 이상?
  if (weight >= 68.6) {
    System.out.println("남성 평균 몸무게 이상!");
  } else {
    System.out.println("남성 평균 몸무게 미만!");
  }
} else {
  // 몸무게 평균 이상?
  if (weight >= 56.5) {
    System.out.println("여성 평균 몸무게 이상!");
  } else {
    System.out.println("여성 평균 몸무게 미만!");
  }
}

CODE

public class AverageHeight {
  public static void main(String[] args) {
    test(176.3, true);  // 176.3cm, 남 => 평균키 이상
    test(162.7, false); // 162.7cm, 여 => 평균키 이상
    test(171.8, true);  // 171.8cm, 남 => 평균키 이하
    test(158.4, false); // 158.4cm, 여 => 평균키 이하
  }
  public static void test(double height, boolean isMale) {
    // 변수 생성
    String gender = "";
    String result = "";
    // 조건 처리
    if (isMale) {
      gender = "남";
      if (height >= 176.3) {
        result = "이상";
      } else {
        result = "이하";
      }
    } else {
      gender = "여";
      if (height >= 162.7) {
        result = "이상";
      } else {
        result = "이하";
      }
    }
    // 결과 출력
    System.out.printf("%.1fcm, %s => 평균키 %s\n", height, gender, result);
  }
}

6) review: leap year

CODE

public class LeapYear {
  public static void main(String[] args) {
    //입력값 받기
    int input = Integer.parseInt(args[0]);
    // 윤년 여부 계산
    boolean output = isLeapYear(input);
    //결과출력
    System.out.printf("%d년은 윤년입니까? %s", input, output);
  }
  //유년 판별 메소드
  public static boolean isLeapYear(int year){
    //변수 생성
    boolean result = false;
    //조건문 처리(윤년 여부 처리)
    if ((year % 4) == 0) {
      result = true;
      if ((year % 100) == 0) {
        result = false;
        if ((year % 1000) == 0) {
          result = true;
        }
      }
    }
    // 결과값 반환
    return result;
  }
}
profile
블로그 이전 : https://medium.com/@jaegeunsong97

0개의 댓글