본문으로 바로가기

반복문



ex) 시험에 합격할 때까지 ...

    -> 시험에 계속 응시한다.라고 가정하자


Java로 이 과정을 반복문(loop statement)라고 표현가능하다

java의 반복문에는 for문 while문 do ~while문이 있다.


for문

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

{

문장;

문장;    -----> 블록 안의 문장을 순서대로 실행




}



sample1 for문 사용하기


package chap06;


public class Sample1 {


public static void main(String[] args) {

// TODO Auto-generated method stub

for(int i = 1; i <= 5; i++) {  ----- 변수 i의 값을 1개씩 증가시키면서, i<=5가 거짓(false)이 될 때까지

System.out.println("반복하고 있습니다."); 반복됩니다.

}

System.out.println("반복이 끝났습니다.");

}


}



실행결과



반복하고 있습니다.

반복하고 있습니다.

반복하고 있습니다.

반복하고 있습니다.

반복하고 있습니다.


반복이 끝났습니다.

총5번실행된다.



변수를 반복문 내에서 사용하기(반복횟수 출력)

package chap06;


public class Sample2 {


public static void main(String[] args) {

// TODO Auto-generated method stub

for(int i = 1; i <= 5; i++) {

System.out.println(i +"번째 반복입니다.");

}

System.out.println("반복이 끝났습니다.");

}


}



실행 결과

1번째 반복입니다.

2번째 반복입니다.

3번째 반복입니다.

4번째 반복입니다.

5번째 반복입니다.

반복이 끝났습니다.



for문 응용

package chap06;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample3 {


public static void main(String[] args) throws IOException

{

// TODO Auto-generated method stub

System.out.println("몇 개의 *를 출력 하시겠습니까?");

BufferedReader br = new BufferedReader( new InputStreamReader(System.in)) ;

String str = br.readLine();

int num = Integer.parseInt(str);

int i;

for(i=1; i<=num; i++)

{

System.out.print("*");  println은 다음줄로 넘어가지 때문에 사용하지 않았다.

}

}


}


몇개의 *를 출력 하시겠습니까?

8

******** 입력한 수만큼 출력된다.


sample4 1부터 입력한 숫자까지 합 구하기


package chap06;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample4 {


public static void main(String[] args) throws IOException

{

// TODO Auto-generated method stub

System.out.println("숫자 몇까지 합을 구하시겠습니까?");

BufferedReader br = new BufferedReader( new InputStreamReader(System.in)) ;

String str = br.readLine();

int num = Integer.parseInt(str);

int sum = 0;

int i ;

for(i=1; i<=num; i++)

{

sum += i;

}

System.out.println("1부터" + num +"까지 합은" + sum + "입니다.");

}


}


숫자 몇까지 합을 구하시겠습니까?

10

1부터10까지 합은55입니다.





While문



for문 말고 while문이 있다.


while문

while(조건){

문장;

...  -----> 블록 안의 문장을 순서대로 반복 실행한다.

}



while문은 조건이 참인경우에만 지정한 문장을 여러번 반복 실행 합니다.


Sample5.java While문을 사용하기



package chap06;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample5 {


public static void main(String[] args) throws IOException

{

// TODO Auto-generated method stub


int i = 1;

while(i <= 5)

{

System.out.println(i + "번째 반복입니다.");

i++;  ----> 이부분을 빼먹으면 무한 루프가 발생되니 주의해야 한다.

}

}

}



do ~ while문


do ~ while문이 while문과 다른 점은

조건을 판단하기 전에 블록 안의 코드를 실행시킨다, 적어도 한번, 반드시 블록 안의 코드가 실행된다는 점이다.



ex)

do

{

시험에 응시한다.

}

while(시험에 합격하지 못했음);


이 반복문은 시험에 계속 응시하도록 지시하는 반복문이다. 시험이 이미 합격해도 최소 1번은 응시해야한다는 점



sample.java  do ~ while문 사용하기



package chap06;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample6 {


public static void main(String[] args) throws IOException

{

// TODO Auto-generated method stub


int i= 1;

do

{

System.out.println(i + "번째 반복입니다."); ---- i<=5가 거짓이면 반복을 종료한다.

i++;

}

while(i <= 5);

}

}



실행결과

1번째 반복입니다.

2번째 반복입니다.

3번째 반복입니다.

4번째 반복입니다.

5번째 반복입니다.



중첩문

for문 중첩하기


조건문, 반복문안에는 여러 문장을 중첩시킬 수 있다. 

예를 들어, for문 안에 for문을 사용할 수 있다.

for문 중첩


for(식 1-1; 식 2-1; 식 3-1;){

 ...

 for(식 1-2; 식 2-2; 식 3-2;){

}


중첩문 예제 코드



package chap06;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample6 {


public static void main(String[] args) throws IOException

{

// TODO Auto-generated method stub


for(int i=0; i<5 ;i++)

{

for(int j=0;j<3; j++)

{

System.out.println("i는" + i + "\tj는" + j);

}

}

}

}



변수 i의 값을 1 증가시킴
 - 변수 j의 값을 1증가시킴

 - 변수 j의 값을 1증가시킴

 - 변수 j의 값을 1증가시킴


변수 i의 값을 1 증가시킴
 - 변수 j의 값을 1증가시킴

 - 변수 j의 값을 1증가시킴

 - 변수 j의 값을 1증가시킴

,,,

i는0 j는0
i는0 j는1
i는0 j는2
i는1 j는0
i는1 j는1
i는1 j는2
i는2 j는0
i는2 j는1
i는2 j는2
i는3 j는0
i는3 j는1
i는3 j는2
i는4 j는0
i는4 j는1
i는4 j는2



break 문


처리의 흐름을 강제로 종료 시킨다. 그블록에서 즉시 빠져나온다.


sample9.java break문으로 블록빠져나오기


package chap06;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample8 {


public static void main(String[] args) throws IOException

{

// TODO Auto-generated method stub


System.out.println("1-10중 정수를 입력하세요");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str = br.readLine();

int num =Integer.parseInt(str);

int i;

for(i=1; i<=10; i++)

{

System.out.println(i +"입니다.");

if(i == num)

break;  강제로 빠져 나오게 된다. i변수와 입력받은 num값이 같을 경우 같지 않다면 그만큼 반복

}

}

1-10중 정수를 입력하세요

2

1입니다.

2입니다.



continue 문


반복처리를 건너 뛴 다음, 블록의 시작 위치로 돌아가서 다음 작업을 진행하라


continue문으로 블록 시작 부분으로 돌아가기


package chap06;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample9 {


public static void main(String[] args) throws IOException

{

// TODO Auto-generated method stub


System.out.println("건너뛸 정수를 입력하세요(1~10)");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str = br.readLine();

int num =Integer.parseInt(str);

int i;

for(i=1; i<=10; i++)

{

if(i == num)

   continue; ---- i가 num과 같게 되면 입력받은 값을 건너뛰게 된다. 그다음 맨처음의 블록으로 돌아간다.

   System.out.println(i +"입니다."); --> num이 입력받은 것은 실행되지 않게 된다.

}

}

}


실행결과

 

건너뛸 정수를 입력하세요(1~10)

3

1번째 처리입니다.

2번째 처리입니다.

4번째 처리입니다.

5번째 처리입니다.

6번째 처리입니다.

7번째 처리입니다.

8번째 처리입니다.

9번째 처리입니다.

10번째 처리입니다.


 

예제1) 다음과 같이 화면에 출력하는 코드를 작성하라.

 

1~ 10까지의 짝수를 출력합니다.

2

4

6

8

10


public class Ex01 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
 System.out.println("1 ~ 10까지 짝수를 출력합니다.");
 for(int i = 1; i<=10; i++)
 {
  if(i%2 == 0)
   System.out.println(i);
 }
 }

}

 

 

예제2) 키보드로 정수를 입력받아서, 그 수가 소수이닞 여부를 판단하는 코드를 작성하라

 

2이상의 정수를 입력하십시오.

7
7은 소수입니다.

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Ex05 {

 public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
 System.out.println("2이상의 정수를 입력하십시오");
 
 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 String str = br.readLine();
 
 int num = Integer.parseInt(str);
 
 
 
 for(int i =2 ; i <=num; i++ )
 {
  if(num == i )
  {
   System.out.println(num +"은 소수입니다..");
   break;
  }
  else if(num % i == 0)
  {
  
   System.out.println(num +"은 소수가 아닙니다.");
   break;
  }
  
  
  
 }
 

 

예제3) 탭 문자(\t)를 사용해서 다음과 같이 구구단을 화면에 출력하라



1 2 3 4 5 6 7 8 9

2 4 6 8 10 12 14 16 18

3 6 9 12 15 18 21 24 27

4 8 12 16 20 24 28 32 36

5 10 15 20 25 30 35 40 45

6 12 18 24 30 36 42 48 54

7 14 21 28 35 42 49 56 63

8 16 24 32 40 48 56 64 72

9 18 27 36 45 54 63 72 81



public class Ex03 {


public static void main(String[] args) {

// TODO Auto-generated method stub


for(int i = 1; i <= 9 ; i++)

{

for(int j = 1; j <= 9; j++)

{

System.out.print((i*j)+"\t");

}

System.out.print("\n");

}


}


}


예제4) 다음과 같이 화면에 출력하는 코드를 작성하시오.




public class Ex04 {


public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub



for(int i = 1; i <=5; i++)

{

for(int j = 0; j < i; j++ )

{

System.out.print("*");

}

System.out.println("\n");

}

}


}