자바(Java)의 기초 박살내기 - 제어문(Control Statement)


안녕하세요? 이번 시간에는 제어문에 대하여 공부하겠습니다. 

제어문은 프로그램의 수행 순서를 제어하거나, 문장들의 수행 횟수를 조정하는 문장입니다. 

한마디로 제어문은 프로그램에서 가장 중요한 부분입니다.


 1. 제어문이란? 


- 맨 처음 자바의 개요에서 말했듯이 자바 인터프리터는 위에서 아래로 오른쪽에서 왼쪽으로 프로그램을 읽어갑니다. 그런 프로그램의 흐름을 변경할 수 있는게 제어문입니다. 


- 제어구조는 3가지 종류가 있습니다.

- ① 순차처리 : 위에서 아래로 처리

- ② 선택처리 

- 조건분기 : if, if~else, swich 등

- 무조건 분기 : goto(자바에서는 사용할 수 없는 예약어)

- ③ 반복 처리(Loop): for, while, do~while 




 2. 선택처리 - 조건 분기 

 

① 단일 if문

- 형식 if (조건문) { 문장; } 문장;

- 조건문의 결과가 true 이면 { }안에 문장을 수행한다. 수행 후 { } 바깥쪽 문장을 처리한다.

결과가 false이면 { } 안쪽을 무시하고 바깥쪽 문장을 처리한다.  


<예제 소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class TestIf 
{
    public static void main(String args[]) 
    {
        int jumsu = 80
 
        if(jumsu >= 60// if( 조건문 )
        {
            System.out.println("당신은 합격입니다");    // 문장;
        }
        System.out.println("당신의 점수는" + jumsu + "입니다" );    // 문장;
    }
 
}
cs


<결과>


② if ~ else문

- 형식

if(조건문)

{

처리내용 1;

}else

{

처리내용 2;

}

- 조건문의 결과가 true이면 처리내용1을 처리 false이면 처리내용2 처리


<예제 소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class TestElse 
{
    public static void main(String args[]) 
    {
        int jumsu = 40
 
        if(jumsu >= 60)    //jumsu의 값이 60 이상이면 합격 아니면  
        {
            System.out.println("당신은 합격입니다");
        }
        else
        {
            System.out.println("당신은 불합격입니다");
        }
        System.out.println("당신의 점수는" + jumsu + "입니다" );
    }
 
}
cs

<결과>



③ 다중 if ~ else문

- 형식

if(조건문1)

{

처리내용 1;

}else if(조건문2)

{

처리내용 2;

}else

{

처리내용 3;

}

- else if는 개수의 상관없이 생성가능


④ swich-case 문

- 형식

switch(수식)    // 수식 결과는 정수형 or 문자형, 논리형 X    

{

      case 1:    // case의 값은 오로지 하나

            처리내용1;

            break;    // case를 빠져나오며 다음 case문으로 계속 넘어간다.

      case 2:

            처리내용2;

            break;

      default:        // case문에서 일치하는 값이 없을 경우 수행

            처리내용;

            break;

}


<예제 소스코드>

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
54
55
56
57
58
59
60
import java.util.Scanner;
 
public class SwitchTest 
{
    public static void main(String args[])
    {
        int jumsu = 0;
        
        Scanner scanner = new Scanner(System.in);    // 점수를 입력받기 위해 scanner사용 
        System.out.print("임의의 숫자를 입력하세요: ");
        
        jumsu = scanner.nextInt();
        System.out.println("점수 : " + jumsu);
        scanner.close();    // scanner 닫기
        
        char grade;
        switch(jumsu / 10)    // 입력받은 점수를 10으로 나누어 몫을 정수만 받기
        {
            // 100 ~ 90이면 A학점
            case 10:    
            case 9:
                grade = 'A';
                System.out.println("입력된 점수 " + jumsu + "점은 " + grade + "학점 입니다.");
                break;
            
            // 80점대이면 B학점
            case 8:
                grade = 'B';
                System.out.println("입력된 점수 " + jumsu + "점은 " + grade + "학점 입니다.");
                break;
                
            // 70점대이면 C학점
            case 7:
                grade = 'C';
                System.out.println("입력된 점수 " + jumsu + "점은 " + grade + "학점 입니다.");
                break;
                
            // 60점대이면 D학점
            case 6:
                grade = 'D';
                System.out.println("입력된 점수 " + jumsu + "점은 " + grade + "학점 입니다.");
                break;
            
            // 60점 미만은 F학점
            case 5:
            case 4:
            case 3:
            case 2:
            case 1:
            case 0:
                grade = 'F';
                System.out.println("입력된 점수 " + jumsu + "점은 " + grade + "학점 입니다.");
                break;
                
            // 이외에 점수를 입력했을 때 디폴트 
            default:
                System.out.println("잘못된 점수 입력입니다");
        }
    }
}
cs


<결과>


 3. 반복 (Loop) 


① while문

- 형식

while(조건식)    // 조건식이 true일경우 { }내 처리 false일경우 빠져나옴

{

처리내용;    

}


<예제 소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
public class WhileTest 
{
    public static void main(String args[])
    {
        int a = 0;
 
        while(a < 10)    // a의 값이 10보다 작을때 까지 반복
        {
            a++;
            System.out.println("a=" + a);
        }
    }
}

c<>



<결과>


② do while문
- 형식

do                // 적어도 한번 { }내 문장 실행

{

            문장;

            문장;

}

while(조건식); // 조건식에 true이면 { } 문장 다시한번 실행 false면 빠져나오기


<예제 소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
public class DoWhile 
{
    public static void main(String args[])
    {
        int a = 0;
        do
        {
            a++;
            System.out.println("a=" + a);
        }
        while(a < 10);    // do의 식을 적어도 한번 거치고나서 a의 값이 10보다 작으면 한번더 계속 반복
    }
}
cs


<결과>


③ for문

- 형식

// 초기식은 맨처음 한번 실행후 조건식으로 이동

// 조건식을 만족하면 { }내 문장들을 처리한후 증감식에 이동

for (초기식; 조건식; 증감식)   

{

     문장;

     문장;

}


<예제 소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
public class ForTest 
{
    public static void main(String args[])
    {
        // 초기식: i의 값은 초기값이 1이다.
        // 조건식: i가 10이하이면 반복을 중단한다.
        // 증감식: for문의 내용이 진행된후 i는 1씩증가한다.
        for(int i  = 1; i <= 10 ; i++ )
        {
            System.out.println("a = " + i);
        }
    }
}
cs

<결과>


④ 무한 반복문 만들기

- while(true){ }
- do{ }while(true)

- for(; ; ){ }


 4. 기타 제어문 


- 제어문은 중첩해서 사용할 수 있습니다.
- 제어문이 중첩되면 안쪽먼저 수행후 바깥쪽을 수행합니다.
- 반복문의 경우 라벨을 정해주어 break와 continue사용
- break : switch문이나 반복문 탈출하는 제어문
- continue : 반복문에서 이하문장을 실행하지않고 다음 반복으로 건너뛰는 제어문

<반복문 라벨 정해준 예제 소스코드>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ContinueQuter 
{
    public static void main(String args[])
    {
        outLoop: for (int i = 0 ; i < 3 ; i++)    // for문에 outLoop라는 라벨을 준다.
                    {
                        for(int j = 0 ; j < 5 ; j++)
                        {
                            System.out.println("i : " + i + " - j : " + j);
                            if(j == 2)
                                continue outLoop;    // j의 값이 2라는 조건이 만족하면 outLoop라는 라벨로 돌아간다.
                        }
                    }
    }
}
 
cs


<결과>


<Flag문을 이용한 예제 소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Flag 
{
    public static void main(String args[])
    {
        int hol = 0, jjak = 0;
        int flag = 0;
        
        for(int i = 0 ; i <= 10 ; i++)
        {
            if(flag  == 0)
            {
                hol = hol +i;
                flag = 1;
            }else
            {
                jjak = jjak +i;
                flag = 0;
            }
        }
        System.out.println("홀수의 합 : " + hol);
        System.out.println("짝수의 합 : " + jjak);
    }
}
cs

- 제어문을 이용한 Flag가 0일때는 홀수의 합 1일때는 짝수의 합을 구하는 프로그램 


<결과>



 5. 실습 예제 


- 중요한 제어문을 배웠봤으니 한번 실습을 해봐야겠지요?아래 간단한 문제들을 한번 풀어보세요.(정답은 다음 시간에 공개하겠습니다.)


문제1. 1부터 9까지의 정수를 입력 받아서 입력된 단의 구구단을 출력해보세요.

<결과>




 문제2. 입력된 년도가 윤년인지 아닌 지 판별해주는 프로그램을 작성해보세요.

(단, 윤년은 4의 배수이고 100배수는 아니거나 400의 배수이면 윤년)
  <결과>





  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유