본문 바로가기
언어/JAVA

[제어문] 조건문(if문, switch문)

by 코딩맛집 2023. 1. 16.

제어문의 종류는 조건문과 반복문이 있다. 제어문은 (조건식) { }로 구성되는데, 조건식의 연산 결과에 따라 블록 내부의 실행 여부가 결정된다. 

 

4.2.1 조건문 (if문)

if (조건식) {

}

조건식이 true면 블록을 실행하고  false면 블록을 실행하지 않는다.

 

public class Main {
    public static void main(String[] args) {

        int score = 93;

        if(score >= 90){
            System.out.println("점수가 90보다 큽니다.");
            System.out.println("등급은 A입니다.");
        }
        if(score < 90)
            System.out.println("점수가 90보다 작습니다."); //if 문과는 상관있는 실행문
            System.out.println("등급은 B입니다."); //if 문과는 상관없는 실행문
    }
}

#출력:
점수가 90보다 큽니다.
등급은 A입니다.
등급은 B입니다.

의도한 바는 점수가 90보다 작을 때, "등급은 B입니다."를 출력하고 싶었던 것인데, 점수와 상관없이 무조건 실행된다. 그 이유는 if문의 중괄호 블록이 {}이 없어 "점수가 90보다 작습니다."라인까지만 영향을 미치기 때문이다. 

 

4.2.2 조건문 (if-else문)

if문의 조건식이 true이면 if문의 블록이 실행되고, 조건식이 false이면 else 블록이 실행된다. 

 

4.2.3 조건문 (else-if)

public class Main {
    public static void main(String[] args) {

        int score = 93;

        if(score >=90){
            System.out.println("점수가 100~90 입니다.");
            System.out.println("등급은 A입니다.");
        }
        else if(score>=80){
            System.out.println("점수가 80~89 입니다.");
            System.out.println("등급은 B입니다.");
        }
        else if(score>=70){
            System.out.println("점수가 70~79 입니다.");
            System.out.println("등급은 C입니다.");
        } else{
            System.out.println("점수가 70미만 입니다.");
            System.out.println("등급은 D입니다.");
        }
    }
}

Math.random() 메소드는 아래와 같은 범위에서 double 타입의 난수 하나를 리턴한다.

0.0 <= Math.random < 1.0

주사위 번호 하나를 뽑기 위해 다음 연산식을 사용할 수 있다.

public class Main {
    public static void main(String[] args) {
        int num = (int) Math.random()*6+1;
    }
}

 

4.2.4 조건문 (중첩 if문)

public class Main {
    public static void main(String[] args) {
        int score = 85;
        int num = (int) Math.random()*20+81;
        System.out.println("점수: " + score);
        
        String grade;
        
        if(score>=90){
            if(score>=95){
                grade = "A+";
            } else {
                grade = "A";
            }
        } else {
            if(score>=85){
                grade = "B+";
            }else {
                grade = "B";
            }
        }
        System.out.println("학점: " + grade);
    }
}

 

4.2.5 조건문 (switch문)

switch문은 if문과 마찬가지로 조건 제어문이다. 하지만 switch문은 if문처럼 조건식이 true일 경우에 블록 내부의 실행문을 실행하는 것이 아니라, 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다. if문은 조건식의 결과가 true, false 두 가지밖에 없기 때문에 경우의 수가 많아질수록 else-if를 반복적으로 추가해야하므로 코드가 복잡해진다. 그러나 switch문은 변수의 값에 따라서 실행문이 결정되기 때문에 같은 기능의 if문보다 코드가 간결하다. 

switch(변수) {
	case 값1:
    	break;
    
    	case 값2:
    	break;
        
    	default:
}

switch문은 괄호 안의 값과 동일한 값을 갖는 case로 가서 실행문을 실행시킨다. 만약 괄호 안의 값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행시킨다. default는 생략 가능하다. case 끝에 break가 붙어 있는 이유는 다음 case를 실행하지 말고 switch문을 빠져나가기 위해서이다. break가 없다면 다음 case가 연달아 실행되는데, 이때에는 case 값과는 상관없이 실행된다. char 타입 변수도 switch문에 사용될 수 있다. 다음 예제는 영어 대소문자에 관계없이 똑같은 알파벳이라면 동일하게 처리하도록 만든 switch문이다.

public class Main {
    public static void main(String[] args) {
        char grade = 'B';

        switch (grade){
            case 'a':
            case 'A':
                System.out.println("우수 회원입니다.");
                break;
            case 'b':
            case 'B':
                System.out.println("일반 회원입니다.");
                break;
            default:
                System.out.println("손님입니다.");
        }
    }
}