조건문

TIL·2022년 12월 9일
0

Java (최은빈)

목록 보기
8/27

return, else, else if, 중첩

  • 조건문의 return : 메인 함수의 종료
    • 유효성 검증 부분을 통과하지 못하면 아래의 코드 실행 안됨
    • 조건문의 break : 해당 if문만 종료
  • else : 상위 조건식의 거짓 (하나의 수평선)
package me.day04.nestedIf;

public class NestedIfExample {
    public static void main(String[] args) {
        int score = 91;
        String grade = "";
        int age = 30;

        //// return (유효성 검증1)
        if (!(score >= 0 && score <= 100)) {
            System.out.println("유효하지 않은 score입니다.");
            return;
        } // else if (!(age >= 0 && age <= 100)) {
//            System.out.println("유효하지 않은 데이터입니다.");
//            return;
//        }
        // else는 상위 조건식의 거짓을 포함. score, age는 관계 없으므로 아래처럼 작성하는 것이 맞다

        //// else if (이상)
        if (score >= 95) {
            grade = "A+";
        } else if (score >= 90) { // 조건식1 거짓 + 조건식2 참일때
            grade = "A-";
        } else if (score >= 85) { // 조건식1,2 거짓 + 조건식3 참일때
            grade = "B+";
        } else if (score >= 80) { // 조건식1,2,3 거짓 + 조건식4 참일때
            grade = "B-";
        } else { // 조건식1,2,3,4 거짓 + 조건식5 참일때
            // 실행문 없으면 마지막 else 생략 가능
        }

        System.out.printf("당신의 학점은 %s 입니다 \n", grade);

        // if else if vs. if if
        // else는 하나의 수평선에서 사용 한다 (유효성 검증2)
        // 첫번째 유효성 검사를 통과 못하면 여기 못오므로 첫번째 if에 넣거나(내생각) 하나의 main이 아닌 별도의 함수로 구분(강사님)하는 것이 더 좋은 코드
        if (!(age >= 0 && age <= 100)) {
            System.out.println("유효하지 않은 age 입니다.");
            return;
        }

        //// else if (미만)
        // 10세 미만 : 아동, 20세 미만 : 청소년, 40세 미만 : 청년, 70세 미만 : 중년
        if (age < 10) {
            System.out.println(age + "세는 아동 입니다.");
        } else if (age < 20) {
            System.out.println(age + "세는 청소년 입니다.");
        } else if (age <40) {
            System.out.println(age + "세는 청년 입니다.");
        } else { // == } else if (age < 100) { // 위에서 다 걸러냈으므로
            System.out.println(age + "세는 중년 입니다.");
        }

        //// 중첩
        // else if 로 리팩토링 하는 것이 더 클린
        if (score >= 90) {
            if (score >= 95) { // 95 ~
                grade = "A+";
            } else { // 90 ~ 94
                grade = "A-";
            }
        } else {
            if (score >= 80) {
                if (score >= 85) { // 85 ~ 89
                    grade = "B+";
                } else { // 80 ~ 84
                    grade = "B-";
                }
            } else { // ~ 79
                // code 없으면 else 생략 가능
            }
        }
    }
}



switch

  • if 에서 비교 연산자 생략
package me.day04.switchs;

public class SwitchExample {
    public static void main(String[] args) {
        int month = 1;
        int totalDays = 0;

        // switch : if 조건식의 == 생략 (잘 사용하지 않음)
        switch(month) { // 정수, 문자, 문자열 (문자열은 == 아닌 equals()로 비교) // 실수, boolean은 불가
            // if (month == 1) || (month == 3) || (month == 5) || ... || (month == 12) // 생략 가능
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
            // case 1, 2, 3, 7, 8, 10, 12: // JDK 16 이상부터 가능
                totalDays = 31;
                break; // switch 블록 종료 (for의 break와 다름)

            case 4:
            case 6:
            case 9:
            case 11:
                totalDays = 30;
                break;

            case 2:
                totalDays = 28;
                break;
        }

        System.out.println("switch out");
        System.out.printf("%d월의 총 일수는 %d일 입니다\n", month, totalDays);


        //// 데이터 전처리로 코드를 간단하게 (데이터의 유효성을 검증했듯이) // stream
        String grade = "B".toLowerCase(); // 대문자 입력하든 소문자 입력하든 소문자로 변경 (case-insensitive)

        switch(grade) {
//            case "A": // if (grade.eauals("A") || grade.eauals("a")) // 문자열 비교는 == 아닌 equals()
            case "a":
                System.out.println("우수 회원");
                break;
//            case "B":
            case "b":
                System.out.println("일반 회원");
                break;
            default: // case 다 아닐 경우
                System.out.println("손님");
        }
    }
}

0개의 댓글

관련 채용 정보