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% 초과 - 고도비만(매우위험)");
}
}
}