Coding(Java)/Java(이론)2021. 8. 23. 08:00
반응형

[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등급입니다.

 

반응형
Posted by skywalker222