728x90

반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용되며, 반복문의 종류로는 for문과 while 문 while문의 번형인 do-while문이 있다.

1. for문의 구조와 수행순서

for 문은 초기화, 조건식, 증감식, 블럭 부분 모두 4부분으로 이루어져 있다. 조건식이 참인 동안 블럭 내의 문장들을 반복하다가 false가 되면 반복문을 탈출하게 된다.

for(초기화;조건식:증감식){
	//조건식이 참일 때 수행되어야 하는 식을 기입한다.
}

초기화가 1번으로 이뤄지고  조건식이 2번으로 수행되고 3번으로는 조건식이 참일 때 수행 되어야 하는 식이 진행이 된다. 그 후 증감식이 수행이 된다.

 

public class Main {
    public static void main(String[] args) {
        //숫자 출력하기
        for(int i=1; i<6; i++){
            System.out.println(i);
        }

        for(int j=1; j<6; j++){
            System.out.print(j);
        }
        
    }
}

 

public class Main {
    public static void main(String[] args) {
        //숫자들의 합을 구하기
        int sum=0;

        for(int i=1; i<11; i++){
            sum+=i;
            System.out.printf("1부터 %d까지의 합은 %d이다.\n", i, sum);

        }

    }
}

 

public class Main {
    public static void main(String[] args) {
        //숫자 순서대로 출력하기
        for(int i=1, j=10; i<=10; i++,j--){
            System.out.printf("%d\t%d\n", i, j);
        }

    }
}

 

 

2. 중첩for문

중첩의 횟수는 상관이 없다.

public class Main {
    public static void main(String[] args) {
        //별찍기
        for(int i=1; i<=5; i++){
            for(int j=1; j<=10; j++){
                System.out.print("*");
            }
            System.out.println();
        }

    }
}
**********
**********
**********
**********
**********

 

public class Main {
    public static void main(String[] args) {
        //반삼각형 모양으로 별찍기
        for(int i=1; i<=5; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
*
**
***
****
*****

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //출력할 라인의 수만큼 별찍기
        System.out.print("출력할 라인의 수를 입력하세요 : ");
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();

        for(int i=1; i<=num; i++){
            for(int j=1; j<=i; j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
출력할 라인의 수를 입력하세요 : 7
*
**
***
****
*****
******
*******

 

public class Main {
    public static void main(String[] args) {
        //숫자 표 출력하기
        for(int i=1; i<=5; i++){
            for(int j=1; j<=5; j++){
             System.out.printf("[%d,%d]", i, j);
            }
            System.out.println();
        }
    }
}
[1,1][1,2][1,3][1,4][1,5]
[2,1][2,2][2,3][2,4][2,5]
[3,1][3,2][3,3][3,4][3,5]
[4,1][4,2][4,3][4,4][4,5]
[5,1][5,2][5,3][5,4][5,5]

 

public class Main {
    public static void main(String[] args) {
        //숫자 표 출력하기에서 숫자 같은 것만 남겨두고 출력하기
        for(int i=1; i<=5; i++){
            for(int j=1; j<=5; j++){
                if(i==j){
                    System.out.printf("[%d,%d]", i, j);
                }else{
                    System.out.printf("%5c", ' ');
                }
            }
            System.out.println();
        }
    }
}
[1,1]                    
     [2,2]               
          [3,3]          
               [4,4]     
                    [5,5]

 

3. 향상된 for 문

for(타입 변수명 : 배열 또는 컬렉션){
	//반복할 문장
}

위에 처럼 타입은 배열 또는 컬렉션의 요소의 타입이어야 한다.  배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서 변수에 저장이 된다.

아래와 같은 배열을 선언 했다고 하자, 이 배열의 모든 요소를 출력하는 for문은 이러하다.

int[] array={1,2,3,4,5};

1.기존의 for문을 사용하는 경우

for(int i=0; i<array.length; i++){
	System.out.println(array[i]);
}

2.향상된 for문을 사용하는 경우 

for(int tmp : array ){
	System.out.println(tmp);
}

 

public class Main {
    public static void main(String[] args) {
        //중첩된 for문을 사용하는 경우
        int[] array={1,2,3,4,5};

        for(int i=0; i<array.length; i++){
            System.out.println(array[i]);
        }
        System.out.println("----------구분선입니다-----------");

        for(int tmp : array){
            System.out.println(tmp);
        }

    }
}
1
2
3
4
5
----------구분선입니다-----------
1
2
3
4
5

 

4. while문

while문은 조건식이 true인 동안, 즉 조건식이 거짓이 될 때까지 블럭 내의 문장을 반복한다.

while(조건식){
	//조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다.
}

while문은 먼저 조건식을 평가해서 조건식이 거짓이면 문장 전체를 벗어나고, 참이면 블럭{}내에 문장을 수행하고 다시 조건식으로 돌아간다.  조건식이 거짓이 될 때까지 이 과정이 반복이 된다.

 

for문 while문 비교

//초기화, 조건식, 증감식
for(int i=1; i<=10; i++){
	System.out.println(i);
}
int i=1; //초기화

while(i<=10) { //조건식
	System.out.println(i);
    i++ 	//증감식
}

while 문의 조건식은 생략할 수 없다.

public class Main {
    public static void main(String[] args) {
        //while문 사용 예제
        int i=5;

        while(i--!=0){
            System.out.println(i);
        }

    }
}
4
3
2
1
0

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //사용자로 부터 숫자를 입력받고, 이 숫자의 가가 자리의 합을 구하는 예제
        int num=0, sum=0;
        System.out.print("숫자를 입력하세요. ");

        Scanner scanner = new Scanner(System.in);
        num = scanner.nextInt();

        while(num!=0) {
        	//num을 10으로 나눈 나머지를 sum에 더함
            sum += num%10;
            System.out.printf("sum=%3d num=%d%n", sum, num);

            num/=10; //num = num/10; num을 10으로 나눈 값을 다시 num에 저장을 하겠다.
        }
        System.out.println("각 자리수의 합 : "+sum);

    }
}
숫자를 입력하세요. 12345
sum=  5 num=12345
sum=  9 num=1234
sum= 12 num=123
sum= 14 num=12
sum= 15 num=1
각 자리수의 합 : 15

 

public class Main {
    public static void main(String[] args) {
        int sum=0;
        int i=0;

        //i를 1씩 증가시켜서 sum에 계속해서 더한다.
        while((sum+=++i) <= 100 ) {
            System.out.printf("%d - %d%n", i, sum);
        }
    }
}
1 - 1
2 - 3
3 - 6
4 - 10
5 - 15
6 - 21
7 - 28
8 - 36
9 - 45
10 - 55
11 - 66
12 - 78
13 - 91

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int sum=0;
        boolean flag = true;
        Scanner sc = new Scanner(System.in);

        System.out.println("합계를 구하려는 숫자를 입력하세요. 끝내려면 0을 입력");

        while(flag) {
            System.out.print(">>");

            int num = sc.nextInt();

            if(num!=0){
                sum +=num;
            }else {
                flag = false;
            }
        }
        System.out.println("합계:" + sum);
    }
}
합계를 구하려는 숫자를 입력하세요. 끝내려면 0을 입력
>>100
>>200
>>300
>>400
>>0
합계:1000

 

5. do-while문

do-while문은 while문의 번형으로 기본적인 구조는 while문과 같으나 조건식과 블럭의 순서를 바꿔놓은 것이다. 

while문과 반대로 블럭을 먼저 수행한 후에 조건식을 평가한다.

그렇기 때문에 while문은 조건식의 결과에 따라 블럭이 한 번도 수행되지 않을 수 있지만, do-while문은 최소한 한번은 수행될 것으로 보장한다.

do {
	//조건식의 연산결과가 참일 때 수행될 문장들을 적는다.
}while (조건식);    //항상 뒤에 ;이것을 까먹지 않도록 해야한다.
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //do-while 예제
        int input=0, answer=0;

        answer = (int)(Math.random()*100)+1; //1~100 사이의 임의의 수를 저장
        Scanner sc = new Scanner(System.in);

        do {
            System.out.print("1과 100 사이의 정수를 입력하세요.> ");
            input = sc.nextInt();

            if(input>answer){
                System.out.println("더 작은 수로 다시 시도해 보세요.");
            }else if(input<answer){
                System.out.println("더 큰 수로 다시 시도해보세요");
            }
        }while(input!=answer);

        System.out.println("정답입니다.");
    }
}
1과 100 사이의 정수를 입력하세요.> 2
더 큰 수로 다시 시도해보세요
1과 100 사이의 정수를 입력하세요.> 55
더 큰 수로 다시 시도해보세요
1과 100 사이의 정수를 입력하세요.> 80
더 큰 수로 다시 시도해보세요
1과 100 사이의 정수를 입력하세요.> 90
더 작은 수로 다시 시도해 보세요.
1과 100 사이의 정수를 입력하세요.> 88
더 작은 수로 다시 시도해 보세요.
1과 100 사이의 정수를 입력하세요.> 84
더 큰 수로 다시 시도해보세요
1과 100 사이의 정수를 입력하세요.> 86
정답입니다.

 

public class Main {
    public static void main(String[] args) {
        //do-while 예제(3,6,9 게임 출력하기)
        for(int i=1; i<=100; i++){
            System.out.printf("i=%d", i);

            int tmp = i;

            do{
                //tmp%10이 3의 배수인지 확인(0 제외)
                if(tmp%10%3==0 && tmp%10!=0)
                    System.out.print("짝");
                //tmp /= 10 tmp = tmp /10과 동일
            }while((tmp/=10)!=0);
            System.out.println();
        }
    }
}
i=38짝
i=39짝짝
i=40
i=41
i=42
i=43짝
i=44
i=45
i=46짝

 

 

6. break문

자신이 포함된 가장 가까운 반복문을 벗어난다.

public class Main {
    public static void main(String[] args) {
        //숫자를 1부터 계속 더해 나가서 몇까지 더하면 합이 100을 넘는지 알아내는 예제이다.
        int sum=0;
        int i=0;

        while(true){
            if(sum>100)
                break;
            ++i;
            sum +=i;
        }//end of while

        System.out.println("i=" + i);
        System.out.println("sum=" + sum);
    }
}
i=14
sum=105

 

7.continue문

continue문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.

for문의 경우 증감식으로 이동하며, while문과 do-while문의 경우 조건식으로 이동한다.

public class Main {
    public static void main(String[] args) {
        for(int i=0; i<=10; i++){
            if(i%3==0)
                continue;
            System.out.println(i);
        }
    }
}
1
2
4
5
7
8
10
728x90