반응형
[Java] 7. if문
프로그램의 실행을 제어하는 기능을 하는 명령어를 제어문이라고 한다. 제어문에는 크게 분기문(if, switch), 반복문(for, while), break문, continue문으로 나눌 수 있다.
분기문은 주어진 조건의 결과에 따라 실행 문장을 달리해 다른 결과를 얻기 위해 사용하는 제어문 중 하나이다.
if문은 true 또는 false의 결과, 즉 boolean형 결과를 갖는 조건식이 있어야 하고, 그 조건식의 결과로 실행하는 문장을 결정하게 되는 제어문이다.
if문에는 크게 '단순 if문', '단일 if~else문', '다중 if문'의 세 가지가 있다.
단순 if문
if문은 다음과 같이 문장이 구성된다.
if(조건식) 조건을 만족할 때 실행할 명령; |
조건식을 만족하면 밑에 있는 조건을 만족할 때 실행할 명령을 실행한다.
단일 if~else문은 다음과 같이 문장이 구성된다.
if(조건식) 조건을 만족할 때 실행할 명령; else 조건을 만족하지 않을 때 실행할 명령; |
조건식을 만족하면 조건을 만족할 때 실행할 명령을 실행하고, 그렇지 않은 경우 else 밑의 조건을 만족하지 않을 때 수행할 명령을 실행한다.
다중 if문은 다음과 같이 문장이 구성된다.
if(조건식1) 조건1을 만족할 때 실행할 명령; else if(조건식2) 조건1을 만족하지 않고 조건2를 만족할 때 실행할 명령 .... else 주어진 조건들을 모두 만족하지 않을 때 실행할 명령 |
조건식1을 만족하면 조건을 만족할 때 실행할 명령을 실행하고, 그렇지 않은 경우 else if의 조건식에 해당되면 거기에 해당되는 명령을 실행한다. 이도 저도 아니면(모든 조건들을 만족하지 않는 경우) else 밑의 모두 만족하지 않을 때 실행할 명령을 실행한다.
다음은 단순 if문과 단일 if~else문의 예이다.
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
|
package mymain;
public class _1_If문1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//if문만 사용
String str="나는 수학 연구가";
int num=100;
if(num<90) {
str="꿈을 위해 달려라";
}
//The local variable str may not have been initialized
//str변수를 초기화 하지 않았기 때문에 발생하는 에러
System.out.printf("%s(%d%%)\n",str, num);
System.out.println();
//if-else문 사용
String incantation;
int progress=100;
if(progress<100) {
incantation="좀더 노력이 필요해!";
}else {
incantation="나는 집에서 수학연구를 하는 중이다";
}
//if-else 구조로 incantation값을 처리하면 초기화 할 필요가 없다.
//*incantation: 주문
System.out.printf("%s(진짜 %d%%)\n",incantation, progress);
}
}
|
cs |
위 프로그램의 실행결과는 다음과 같다.
나는 수학 연구가(100%) 나는 집에서 수학연구를 하는 중이다(진짜 100%) |
if문만 사용한 부분의 코드는 다음과 같고
//if문만 사용 String str="나는 수학 연구가"; int num=100; if(num<90) { str="꿈을 위해 달려라"; } //The local variable str may not have been initialized //str변수를 초기화 하지 않았기 때문에 발생하는 에러 System.out.printf("%s(%d%%)\n",str, num); System.out.println(); |
문자열 변수 str을 "나는 수학 연구가", 정수형 변수 num을 "100(정수형, 문자아님!)"으로 주었다. 이 프로그램은 조건문이 num이 90보다 작으면 str을 "꿈을 위해 달려라"로 바꾸도록 되어있다.
num이 100이므로 str은 그대로 "나는 수학 연구가"이고, 이 문자열이 그대로 출력되었다.
if~else문을 사용한 부분의 코드는 다음과 같고
//if-else문 사용 String incantation; int progress=100; if(progress<100) { incantation="좀더 노력이 필요해!"; }else { incantation="나는 집에서 수학연구를 하는 중이다"; } //if-else 구조로 incantation값을 처리하면 초기화 할 필요가 없다. //*incantation: 주문 System.out.printf("%s(진짜 %d%%)\n",incantation, progress); |
문자열 변수 incantation을 비워놓고, 정수형 변수 progress에 정수값 100을 설정했다.
조건문은 progress가 100보다 작으면 incantation을 "좀 더 노력이 필요해!"라는 문자열로 설정하고, 그렇지 않으면 "나는 집에서 수학연구를 하는 중이다"라는 문자열로 설정하도록 되어있다.
progress가 100이므로 이 프로그램은 "나는 집에서 수학연구를 하는 중이다(진짜 100%)"를 출력한다.
다음은 if~else문을 다수 사용한 예이다.
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
|
package mymain;
public class _1_if문2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String grade="9등급"; //기본값
int matper=98; //수학백분위
//가정: 각 등급을 체크할 때 소요되는 시간 1초
//단점: 불필요한 조건명령을 수행한다
//1등급: 96~100%
if(matper>=96 && matper<=100) { //1초
grade="1등급";
}
if(matper>=89 && matper<96) { //1초
grade="2등급";
}
if(matper>=77 && matper<89) { //1초
grade="3등급";
}
if(matper>=60 && matper<77) { //1초
grade="4등급";
}
if(matper>=40 && matper<60) { //1초
grade="5등급";
}
if(matper>=23 && matper<40) { //1초
grade="6등급";
}
if(matper>=11 && matper<23) { //1초
grade="7등급";
}
if(matper>=4 && matper<7) { //1초
grade="8등급";
}
if(matper>=0 && matper<4) { //1초
grade="9등급";
}
System.out.printf("백분위 %d%%는 %s입니다.",matper, grade);
}
}
|
cs |
위의 if문은 백분위에 따른 등급산출을 하는 프로그램이다. 실제로 성적 처리는 위 처럼 if~else문을 여러개 놓고 성적을 입력해 성적 처리를 한다.
문자열 변수 grade는 "9등급"이 기본값으로 설정되어 있고, 정수열 변수 matnum에는 98이 설정되어 있다.
위 프로그램을 실행하면 다음과 같은 결과가 나온다.
백분위 98%는 1등급입니다. |
다음은 다중 if문의 예이다. 앞의 등급산출 프로그램을 약간 손을 본(?) 것이다.
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
|
package mymain;
import java.util.Scanner;
public class _1_if문3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String grade="9등급";
int matper;
Scanner scan=new Scanner(System.in);
System.out.print("수학 백분위를 입력하시오:");
matper=scan.nextInt();
if(matper>=0 && matper<=100) {
if(matper>=96 && matper<=100) grade="1등급";
else if(matper>=89 && matper<96) grade="2등급";
else if(matper>=77 && matper<89) grade="3등급";
else if(matper>=60 && matper<77) grade="4등급";
else if(matper>=40 && matper<60) grade="5등급";
else if(matper>=23 && matper<40) grade="6등급";
else if(matper>=11 && matper<23) grade="7등급";
else if(matper>=4 && matper<7) grade="8등급";
else if(matper>=0 && matper<4) grade="9등급";
System.out.printf("백분위 %d%%는 %s입니다.\n", matper, grade);
}
else {
System.out.println("백분위는 0~100 사이만 유효합니다. 다시 입력하세요.\n");
}
}
}
|
cs |
앞에서 했던 등급산출 프로그램에서 matper를 입력받게 하고, 숫자만 입력받게 하는 if문 안에 앞에서 했던 프로그램을 입력했다.
문자열 변수 grade는 9등급으로 설정되어 있고, 정수형 변수 matper는 scanner를 통해 입력받는 것으로 되어있다.
위 프로그램을 실행시키고 matper에 89를 입력했다.
다음은 그 결과이다.
수학 백분위를 입력하시오:89 백분위 89%는 2등급입니다. |
반응형
'Coding(Java) > Java(이론)' 카테고리의 다른 글
[Java] 9. for문 (0) | 2021.08.24 |
---|---|
[Java] 8. switch문 (0) | 2021.08.23 |
[Java] 6. 시프트, 관계, 이진논리, 일반논리, 3항, 대입연산자 (0) | 2021.08.20 |
[Java] 5. 단항연산자, 산술연산자 (0) | 2021.08.20 |
[Java] 4. 자료의 입출력 (0) | 2021.08.18 |