본문 바로가기
JAVA/이재환의 자바 프로그래밍 입문

[Java] Ch.6 제어문

by ♡˖GYURI˖♡ 2023. 10. 16.

제어문

프로그램의 진행 흐름을 필요에 따라 변경하고 싶을 때 사용

 

조건문

if문

public class Ex01_if
{
    public static void main(String[] args)
    {
        int num = 100;
        
        if (num > 50) 
        {
            System.out.println("num 변수의 값이 50보다 큽니다.");
        }

        // 한 줄만 실행하면 중괄호를 생략 가능
        if (num > 50)
            System.out.println("num 변수의 값이 50보다 큽니다.");

        // 같은 줄에 작성 가능. 실행 문장의 끝은 세미콜론(;)으로 구분.
        if (num > 50) System.out.println("num 변수의 값이 50보다 큽니다.");

        // 의도치 않은 결과 : 중괄호 X
        if (num < 50)
            System.out.println(num); // num 변수의 값이 궁금해 출력
            System.out.println("num 변수의 값이 50보다 작습니다.");

    }
}

 

 

switch문

switch문을 사용하면 많은 선택자를 가지는 분기 처리를 할 수 있음

조건식의 결과와 일치하는 case문에 작성된 문장을 실행

조건식의 값이 어떤 case와도 맞지 않으면 default로 넘어가게 됨

각 case의 마지막에는 break문을 사용해서 선택한 처리만을 실행하도록 함

 

public class Ex02_switch
{
    public static void main(String[] args)
    {
        int n = 4;
        
        switch(n % 3) 
        {
        case 1:
            System.out.println("나머지가 1");
            break;
        case 2:
            System.out.println("나머지가 2");
            break;
        default:
            System.out.println("나머지가 0");        
        }
    }
}

 

break문을 생략하면 switch문 안의 모든 case문 내용이 전부 실행됨

break는 반복문과 switch문에서만 사용할 수 있음

실행 흐름을 중단시키고 해당 중괄호 밖으로 빠져나감

 

public class Ex03_SwitchNoneBreak
{
    public static void main(String[] args)
    {
        int n = 6;
        
        switch(n % 7) 
        {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            System.out.println("주중");
            break;
        case 6:
        default:
            System.out.println("주말");        
        }
    }
}

 

조건문에 스트링 사용도 가능

 

public class Ex04_SwitchString
{
    public static void main(String[] args)
    {
        String name = "홍길동";
        
        switch(name) 
        {
        case "홍길동":
            System.out.println("제 이름은 홍길동입니다.");
            break;
        case "전우치":
            System.out.println("제 이름은 전우치입니다.");
            break;
        case "손오공":
            System.out.println("제 이름은 손오공입니다.");
            break;
        default:
            System.out.println("같은 이름이 없습니다.");
        }
    }
}

 

 

반복문

for문을 이용한 반복

public class Ex05_for
{
    public static void main(String[] args)
    {
        for (int i=2; i<10; i++)
        {
            System.out.print((2 * i) + " ");
        }
        System.out.println();
        
        // 한 줄만 실행하면 중괄호를 생략 가능
        for (int i=2; i<10; i++)
            System.out.print((3 * i) + " ");
        System.out.println();
        
        // 같은 줄에 작성 가능. 실행 문장의 끝은 세미콜론(;)으로 구분.
        // 보통 이렇게 만들지는 않습니다.
        for (int i=2; i<10; i++) System.out.print((4 * i) + " ");
        System.out.println();

        // 의도치 않은 결과
        for (int i=2; i<10; i++)
            //System.out.println(i); // i 변수의 값이 궁금해 출력
            System.out.print((5 * i) + " ");
        System.out.println();
        
    }
}

 

for문 요소의 생략·응용

public class Ex06_ForExtension
{
    public static void main(String[] args)
    {
        // 2의 배수 출력

        int i = 0;
        for ( ; i<10; i++)
        {
            if (i % 2 == 0)
                System.out.print(i + " ");
        }
        System.out.println();

        i = 0;
        for ( ; i<10; )
        {
            if (i % 2 == 0)
                System.out.print(i + " ");
            i++;
        }
        System.out.println();

        for (int j=0; j<10; j=j+2)
        {
            System.out.print(j + " ");
        }
        System.out.println();
    }
}

 

 

while문을 이용한 반복

while문은 반복의 횟수보다는 처리 조건이 정해져 있을 때 사용

for문은 반복의 횟수가 정해져 있을 때 사용

 

public class Ex07_while
{
    public static void main(String[] args)
    {
        int num = 0;
        int count = 0;
        
        while((num++) < 100) 
        {
	    // if(((num % 5) != 0) || ((num % 7) != 0))
	    // continue;    // 5와 7의 배수 아니라면 나머지 건너띄고 위로 이동 
                
            if( (num % 5) != 0 )
                continue; 
            if( (num % 7) != 0 )
                continue; 

            count++;                    // 5와 7의 배수인 경우에만 실행
            System.out.println(num);    // 5와 7의 배수인 경우에만 실행
        }
        
        System.out.println("count: " + count);
    }
}

 

do~while문을 이용한 반복

do~while문도 while문과 똑같이 반복 처리를 실행하는 제어문

while문은 먼저 조건식을 평가하기 때문에, 첫 번째 반복을 돌 때 조건식의 결과가 false이면 while문 중괄호 안의 문장들이 한 번도 수행되지 않을 수 있음

그에 반해 do~while문은 조건식을 아래쪽에 쓰기 때문에 최소 한 번은 중괄호 안의 문장들이 실행됨

 

do
{
	문장;
} while(조건문);

 

public class Ex08_DoWhile
{
    public static void main(String[] args)
    {
        int num = 0;
        int count = 0;
        
        do 
        {
            num++;
            
            if( (num % 5) != 0 )
                continue; 
            if( (num % 7) != 0 )
                continue; 

            count++;                    // 5와 7의 배수인 경우에만 실행
            System.out.println(num);    // 5와 7의 배수인 경우에만 실행
        } while(num < 100);
        
        System.out.println("count: " + count);
    }
}

 

레이블을 이용한 중첩된 반복문의 일괄 중지

여러 개의 중첩된 반복문에서는 코드 실행 중간에 break문을 만나면 가장 가까운 반복문을 빠져나가게 됨

중첩된 반복문의 안쪽 반복문에서 특정 조건을 충족하면 바깐쪽의 모든 반복문까지 중지하고 그다음 코드를 실행하고 싶은 경우가 있음 → 이럴 때 레이블을 이용한 반복문의 중지 기능을 사용

 

반복문에 레이블을 지정하고 break에 레이블 이름까지 같이 지정

 

public class Ex09_BreakLabel
{
    public static void main(String[] args)
    {
        int sum = 0;
        
myExit: while (true)
        {
            for (int i=0; i<100; i++)
            {
                sum = sum + i;
                if (sum > 2000)
                {
                    System.out.printf("%d : %d\n", i, sum);
                    break myExit;
                }
            }
        }
    }
}