Post

JAVA 제어문(1) - 조건문

프로그램 코드가 조건에 따라 선택적으로 실행되도록 제어하는 구문을 조건문이라 합니다.

JAVA 제어문(1) - 조건문

#01. if문

1) 구문형식

괄호 안에 주어진 조건이 참인 경우 블록 {} 안을 수행.

조건은 , 거짓 을 판단할 수 있는 형태면 어떤 구문이건 사용 가능하다.

1
2
3
if (조건) {
    // ... 조건이 참인 경우 실행할 명령 ...
}
구분연산
비교식==, !=, >, >=, <, <=
논리식&&, ||
논리값true, false
📗 Ex01_if문.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.Scanner;

public class Ex01_If문 {
    public static void main(String[] args) {
        // 입력값을 통해 정수형 변수를 준비
        Scanner reader = new Scanner(System.in);
        System.out.print("점수를 입력하세요: ");
        int score = reader.nextInt();
        reader.close();

        // 입력값에 따른 if문 실행
        System.out.println("시험 시작");
        if (score >= 60) {
            System.out.println("합격입니다");
        }
        System.out.println("시험 끝");
    }
}
📗 Ex02_If문_비교식_조건.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Scanner;

public class Ex02_If문_비교식_조건 {
    public static void main(String[] args) {
        // 입력값을 통해 정수형 변수를 준비
        Scanner reader = new Scanner(System.in);
        System.out.print("나이를 입력하세요: ");
        int myage = reader.nextInt();
        reader.close();

        // 변수가 19와 같은 경우에 "참"
        if (myage == 19) {
            System.out.println("19살 입니다. ... (1)");
        }

        // 변수가 19과 다른 경우에 "참"
        if (myage != 19) {
            System.out.println("19살이 아닙니다. ... (2)");
        }

        // 변수가 19보다 큰 경우에 "참"
        if (myage > 19) {
            System.out.println("성인입니다. ... (3)");
        }

        // 변수가 19보다 작거나 같은 경우에 "참"
        if (myage <= 19) {
            System.out.println("학생입니다. ... (4)");
        }
    }
}
📗 Ex03_If문_논리식_조건.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;

public class Ex03_If문_논리식_조건 {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        System.out.print("점수를 입력하세요: ");
        int point = reader.nextInt();
        reader.close();

        // AND(&&) --> 두 조건이 모두 참이어야 전체가 참
        if (point > 70 && point <= 80) {
            System.out.println("C학점 입니다.");
        }

        // OR(||) --> 두 조건중 하나라도 참이면 전체가 참
        if (point <= 70 || point > 80) {
            System.out.println("C학점이 아닙니다.");
        }
    }
}
📗 Ex04_If문_논리값_조건.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Ex04_If문_논리값_조건 {
    public static void main(String[] args) {
        boolean isKorean = true;    // (1),(4),(5) 실행됨
        //boolean isKorean = false;    // (2),(3),(6) 실행됨

        if (isKorean == true) {
            System.out.println("한국사람입니다....(1)");
        }

        if (isKorean == false) {
            System.out.println("한국사람이 아닙니다....(2)");
        }

        if (isKorean != true) {
            System.out.println("한국사람이 아닙니다....(3)");
        }

        if (isKorean != false) {
            System.out.println("한국사람입니다....(4)");
        }

        if (isKorean) {
            System.out.println("한국사람입니다....(5)");
        }

        if (!isKorean) {
            System.out.println("한국사람이 아닙니다....(6)");
        }
    }
}

2) if ~ else문

조건이 참인 경우 if 블록이 실행, 그렇지 않은 경우 else 블록이 실행 된다.

1
2
3
4
5
if (조건) {
    // ... 조건이 참인 경우 실행할 명령 ...
} else {
    // ... 조건이 참이 아닌 경우 실행할 명령 ...
}
📗 Ex05_IfElse_1.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;

public class Ex05_IfElse_1 {
    public static void main(String[] args) {
        // 점수값 입력받기
        Scanner reader = new Scanner(System.in);
        System.out.print("점수를 입력하세요: ");
        int score = reader.nextInt();
        reader.close();

        System.out.println("시험 시작");

        if (score >= 60) {
            System.out.println("합격입니다");
        } else {
            System.out.println("불합격입니다");
        }

        System.out.println("시험 끝");
    }
}
📗 Ex06_IfElse_2.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Ex06_IfElse_2 {
    public static void main(String[] args) {
        boolean isKorean = true;        // (1),(4) 실행됨
        //boolean isKorean = false;       // (2),(3) 실행됨

        // 논리값을 조건으로 사용할 경우 "만약 이 변수가 참이라면?"의 의미
        if (isKorean) {
            System.out.println("한국사람입니다....(1)");
        } else {
            System.out.println("한국사람이 아닙니다....(2)");
        }

        // 논리값의 부정형을 조건으로 사용할 경우 "만약 이 변수가 거짓이라면?"의 의미
        if (!isKorean) {
            System.out.println("한국사람이 아닙니다....(3)");
        } else {
            System.out.println("한국사람입니다....(4)");
        }
    }
}

3) if ~ else if ~ else 문

여러 개의 조건을 나열하여 그 중 가장 처음 만나는 참인 조건의 블록을 수행하고 그 외의 블록은 실행하지 않고 빠져 나간다.

else if 블록은 필요한 만큼 나열 가능하다.

else 블록은 필요하지 않다면 생략 가능하다.

1
2
3
4
5
6
7
8
9
if (1 조건) {
    ...
} else if (2 조건) {
    ...
} else if (3 조건) {
    ...
} else {
    ...
}
📗 Ex07_If_ElseIf_Else.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;

public class Ex07_If_ElseIf_Else {
    public static void main(String[] args) {
        // 점수값 입력받기
        Scanner reader = new Scanner(System.in);
        System.out.print("점수를 입력하세요: ");
        int point = reader.nextInt();
        reader.close();

        if (point > 90) {
            System.out.println("A");
        } else if (point > 80) {
            System.out.println("B");
        } else if (point > 70) {
            System.out.println("C");
        } else {
            System.out.println("F");
        }
    }
}

#02. switch문

1) 구문 형식

하나의 변수값에 대한 여러 가지 경우의 수를 나열하고 그 중 일치하는 case 블록을 break 명령을 만나기 전까지 실행함.

만약 break; 명령이 없다면 다음 case 블록도 함께 실행된다.

마지막의 default 블록은 일치하는 case를 찾지 못한 경우 실행되며 필요하지 않다면 생략 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch (변수) {
    case '값1':    // 경우의 수는 필요한 만큼 나열
        ...
        break;
    case '값2':
        ...
        break;
    case '값n':
        ...
        break;
    default: // 일치하는 경우가 없을 경우 수행할 블록(생략가능)
        ...
        break;
}
📗 Ex08_Switch.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Ex08_Switch {
    public static void main(String[] args) {
        String grade = "B";

        // Switch문을 활용한 조건 분기
        switch (grade) {
            case "A":
                System.out.println("91~100점 사이 입니다....(1)");
                break;
            case "B":
                System.out.println("81~90점 사이 입니다....(1)");
                break; // 이 위치를 주석으로 막은 상태로도 실행해 보세요.
            case "C":
                System.out.println("71~80점 사이 입니다....(1)");
                break;
            default:
                System.out.println("70점 이하 입니다....(1)");
                break;
        }

        // Switch문을 if문으로 변경한 예시
        if (grade == "A") {
            System.out.println("91~100점 사이 입니다....(2)");
        } else if (grade == "B") {
            System.out.println("81~90점 사이 입니다....(2)");
        } else if (grade == "C") {
            System.out.println("71~80점 사이 입니다....(2)");
        } else {
            System.out.println("70점 이하 입니다....(2)");
        }
    }
}
📗 Ex09_Break없음.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Scanner;

public class Ex09_Break없음 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("점수를 입력하세요: ");
        int score = scan.nextInt();
        scan.close();

        // break가 없는 switch 문
        switch (score / 10) {
            case 9:
                System.out.println("A학점 입니다.");
            case 8:
                System.out.println("B학점 입니다.");
            case 7:
                System.out.println("C학점 입니다.");
            case 6:
                System.out.println("D학점 입니다.");
            default:
                System.out.println("F학점 입니다.");
        }
    }
}

2) 의도적으로 break절을 조절하는 경우

조건에 맞는 case가 두 개 이상인 경우.

grade값이 A, B, C인 세 개의 경우가 모두 하나의 문장을 실행할 수 있도록 블록 구조를 구성한다.

📗 Ex10_Break제어.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Ex10_Break제어 {
    public static void main(String[] args) {
        String grade = "B";

        // A,B,C 학점은 Pass, 그 외의 학점은 Not-Pass
        switch (grade) {
            case "A":
            case "B":
            case "C":
                System.out.println("Pass...(1)");
                break;
            default:
                System.out.println("Not-Pass...(1)");
                break;
        }

        // 위의 코드와 같은 처리
        if (grade == "A" || grade == "B" || grade == "C") {
            System.out.println("Pass...(2)");
        } else {
            System.out.println("Not-Pass...(2)");
        }
    }
}

연습문제

1) 연령대 구하기

프로그램이 실행되었을 때 자신의 나이를 입력받도록 구성하고 그 나이를 토대로 연령대를 계산하여 출력하는 프로그램을 작성하시오. 단, switch문을 사용해야 합니다.

출력되는 연령층은 다음의 항목 중 하나여야 합니다.

  • 0~9세 : 어린이
  • 10~19세: 10대
  • 20~29세: 20대
  • 30~39세: 30대
  • 40~49세: 40대
  • 50~59세: 50대
  • 60세 이상: 노년층

출력결과

1
2
나이를 입력하세요: 39
당신은 30대 입니다.
📗 연습문제(1) 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.Scanner;

public class 연습문제01 {
    public static void main(String[] args) {
        /** 1) 자신의 나이를 입력받도록 구성 */
        Scanner reader = new Scanner(System.in);
        System.out.print("나이를 입력하세요: ");
        int age = reader.nextInt();
        reader.close();

        /** 2) 나이를 토대로 연령대를 계산(switch문을 사용) */
        // 10~19세 --> 10대
        // 20~29세 --> 20대
        // 30~39세 --> 30대
        // => 10의 자리만 구함
        int level = (age / 10) * 10;

        switch (level) {
            case 0:
                System.out.println("0~9세 : 어린이");
                break;
            case 10:
                System.out.println("10~19세: 10대");
                break;
            case 20:
                System.out.println("20~29세: 20대");
                break;
            case 30:
                System.out.println("30~39세: 30대");
                break;
            case 40:
                System.out.println("40~49세: 40대");
                break;
            case 50:
                System.out.println("50~59세: 50대");
                break;
            default:
                System.out.println("60세 이상: 노년층");
                break;
        }
    }
}

2) 비만도 구하기

다음의 내용은 키와 몸무게를 입력받아 표준체중을 출력하는 프로그램을 구현하기 위한 요구사항이다. 주어진 요구사항을 충족하는 프로그램을 완성하시오.

요구사항(1) - 키와 몸무게

사용자로부터 직접 값을 입력받는 변수를 다음과 같이 준비합니다.

  • myHeight - 정수형 (자신의 키)
  • myWeight - 정수형 (자신의 몸무게)

요구사항(2) - 표준체중 구하기

표준체중을 의미하는 double형 변수 standardWeight 변수를 다음의 공식으로 구하세요.

키가 150 이하인 경우

$표준체중 = 신장(cm) - 110$

키가 150보다 큰 경우

$표준체중 = (신장cm - 110) \times 0.9$

요구사항(3) - 비만도 구하기

비만도를 의미하는 double형 변수 obesity를 다음의 공식으로 구하세요.

$비만도 = {현재 몸무게 - 표준체중 \over 표준체중} \times 100$

요구사항(4) - 결과 출력하기

아래의 4가지 경우 중 하나로 출력되어야 합니다.

1
2
3
4
- 20% 이하 - 정상(안심)
- 20% 초과, 30% 이하 - 경도비만(주의)
- 30% 초과, 50% 이하 - 중등도 비만(위험)
- 50% 초과 - 고도비만(매우위험)
📗 연습문제(2) 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.util.Scanner;

public class 연습문제02 {
    public static void main(String[] args) {
        /** 요구사항(1) - 키와 몸무게 */
        Scanner reader = new Scanner(System.in);

        // myHeight - 정수형 (자신의 키)
        System.out.print("키를 입력하세요: ");
        int myHeight = reader.nextInt();

        // myWeight - 정수형 (자신의 몸무게)
        System.out.print("몸무게를 입력하세요: ");
        int myWeight = reader.nextInt();

        reader.close();

        /** 요구사항(2) - 표준체중 구하기 */
        double standardWeight = 0;

        if (myHeight <= 150) {
            standardWeight = myHeight - 110;
        } else {
            standardWeight = (myHeight - 110) * 0.9;
        }

        /** 요구사항(3) - 비만도 구하기 */
        double obesity = (myWeight - standardWeight) / standardWeight * 100;

        /** 요구사항(4) - 결과 출력하기 */
        // 문제 내용대로 if문 구성
        if (obesity <= 20) {
            System.out.println("20% 이하 - 정상(안심)");
        } else if (obesity > 20 && obesity <= 30) {
            System.out.println("20% 초과, 30% 이하 - 경도비만(주의)");
        } else if (obesity > 30 && obesity <= 50) {
            System.out.println("30% 초과, 50% 이하 - 중등도 비만(위험)");
        } else if (obesity > 50) {
            System.out.println("50% 초과 - 고도비만(매우위험)");
        }

        // if문 요약
        if (obesity <= 20) {
            System.out.println("20% 이하 - 정상(안심)");
        } else if (obesity <= 30) {
            System.out.println("20% 초과, 30% 이하 - 경도비만(주의)");
        } else if (obesity <= 50) {
            System.out.println("30% 초과, 50% 이하 - 중등도 비만(위험)");
        } else {
            System.out.println("50% 초과 - 고도비만(매우위험)");
        }
    }
}
This post is licensed under CC BY 4.0 by the author.