tuter77

Java : 반복문, 중첩 반복문, break, continue 본문

JavaStudy

Java : 반복문, 중첩 반복문, break, continue

tuter77 2023. 1. 29. 19:27

● 반복문 

 반복문은 대부분의 언어에서 종류가 비슷하다고 하는데 while, do-while, for 문의 종류가 있다. 

 

▷while문 

 

조건이 참(true)인 동안 반복수행하는 기능. 

조건에 맞지 않으면 수행중지.

조건은 주로 반복횟수나 값의 비교의 결과에 따라 true, false가 판단 된다.

while문은 아래와 같이 작성한다.

 

while (조건식) {

          수행문1;

           ...

}수행문2

 

위의 예시처럼 조건이 true라면 안의 수행문1을 수행하고, 수행 중 조건이 false가 되면 반복문을 빠져나와 수행문2를 수행하게 된다.

 

▷do-while문

 

while문이 조건을 먼저 체크한 후 반복수행을 하게 된다면, do-while문은 조건과 상관없이 수행을 한 번하고 나서 조건을 체크하고 반복수행한다.

 

do{

     수행문1;

      ...

} while (조건식);

수행문2;

....

 

위의 형태와 같이 수행문1이 먼저 한 번 수행되고 난 후 조건을 확인해 수행문1을 반복수행한다. 

이후 조건이 false라면, 수행문2를 수행하게 된다.

 

▷for문

가장 많이 사용하는 반복문으로 

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

{

    수행문1;

     .....

}

의 형태를 가진다.

간단한 예제로 알아보겠다.

 

예제)

int num;

 

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

{

    System.out.println(num);

}

 

위의 예제에서 작동순서는 초기화식(num = 1) > 조건식(num <= 5) > 조건이 true라면 아래의 수행문(System.out.println(num);) > 증감식( num++) > 조건식(num <= 5) > 반복 > 조건이 false라면 for문을 탈출하게 된다.

 

*첨언으로 위의 형태에서 각 식들은 하나의 문장으로 " ; " 세미콜론을 붙여줘야한다.

또한 초기화식, 증감식은 복수로 작성도 가능하며, 이미 선언되었다면 비워두는 것도 가능하다.

(예. int num = 1; 로 선언된경우 for(  ; num <= 5; num++) 또는 증감식이 길다면 아래 수행문 다음구문에 추가해줄 수 도있다.)

 

▷ 각 반복문의 쓰임 

do-while문은 제어방식이 다른 두 반복문과 다르기 때문에 수행문이 선실행될 필요가 있을때 사용한다.

while문은 조건식의 결과나 변수가 true, false의 경우일 때 주로 사용한다.

for문은 특정수의 범위, 횟수와 관련하여 반복되는 경우 주로 사용한다.(배열과 함께 많이 사용된다.)

 

▷ for문의 문장 생략

앞서 말했듯 for문에서는 이미 선언되어있는 변수의 경우 생략이 가능하다. 

추가적으로 break문을 사용하게 되면 조건식도 생략할 수 있다.

예제로 보면 아래와 같다.

 

int i = 0;

for (  ; i < 5; i++)

{

...

}

 

 - 조건식 생략

위에서 말했듯 break문이 들어가면 조건식 생략이 가능하다.

 예제)

for (i = 0;  ; i++){

sum += i;

if(sum > 200) break;

}

 

위의 예제처럼 for문안에 조건과 break문이 기술되면 조건식 생략이 가능하다.

 

- 증감식 생략

for(i=0; i<5;  ) {

...

i = (++i) % 10;

}

증감식이 복잡한 경우 for문 하단에 기재해 생략할 수 있다.

 

*무한반복의 경우

for(  ;  ;  ){

}

while(true){

}

 

위 두 경우는 무한 반복되는 경우이다.

 

▷ 중첩반복문

반복문 내의 또다른 반복문의 형태를 띈다.

여러겹으로 구현 가능하나, 수행시간의 문제가 발생할 수 있다.(일반적으로 많아도 3겹 정도 쓴다.)

외부 반복문과 내부 반복문간의 변수값 변화에 유의하며 구현해야한다.

 

* while 반복문에서는 변수를 밖에서 초기화 해야하는 경우가 있다.

 

예시) 구구단 만들기 

package ch20;

public class NestedLoopTest {

public static void main(String[] args) {

int dan = 2;

int count = 1;

 

// for ( ; dan <=9; dan++) {

//

// for(count = 1; count <=9; count++) {

//

// System.out.println(dan + "X" + count + "=" + dan*count);

// }

// System.out.println();

// }

dan = 2;

count = 1;

while( dan <= 9) {

 

count = 1;

while(count <= 9) {

System.out.println(dan + "X" + count + "=" + dan*count);

count++;

}

dan++;

System.out.println();

}

}

}

위의 예시는 반복문의 형태를 가장 잘 보여주는 구구단 만들기 이다. 

변수 dan과 카운트가 각 항이되어 A*B = C의 형태를 띄게 된다.

 

주석처리된 for문을 보면, 변수 dan을 조건으로 하는 for 문 안에 변수 count를 조건으로 하는 for문이 중첩되어있다.

내부 for문에서 A*B = C의 형태를 출력하게 되고, 수행을 반복한다.(외부 for문의 System.out.println()은 각 단마다 줄을 띄워서 콘솔에 출력하기 위함이다.)

 

2X1=2

2X2=4

...

위 for문을 구동하면 이와같은 결과물이 나오게된다.

 

다음으로 while문을 살펴보면, dan을 변수로하는 while문 안에 count변수가 한번더 선언되고(count =1;) count를 조건으로 하는 while문이 중첩되어있음을 알 수 있다.

이와 같이 하는 이유는 while문에는 초기화식이 없기 때문이다. 

때문에 count의 값이 9까지 수행된 후 초기화 되지않아 2단까지 밖에 반복수행되지않는다. 

위 처럼 초기화 선언을 다시 해주면 그제야 9단까지 구구단이 콘솔에 출력된다.

 

● Break / Continue 문

 

 Break문

감싸고 있는 제어문의 블록을 빠져나오는 기능으로 switch문에서 사용했었다. 여기에선 반복문에서 주로 조건문(if)와 같이 사용하여 조건에 해당되는 경우, 반복수행을 멈추고 반복문 외부로 이동하는 기능을 본다.여러 반복 중첩시엔, break문이 포함된 반복문만 빠져나온다.예시)

package ch21;

public class BreakTest {

public static void main(String[] args) {

// 몇 번째 숫자까지 더해야 100이 넘는지 확인해보기 구현. 일반적인 for문과 break문 비교

int sum = 0;

int num;

 

for (num = 1; sum <= 100; num++) {

sum += num;

}

// for(num = 1; ; num++) {

//

// sum += num;

// if (sum >= 100)

// break;

// }

 

System.out.println(sum);

System.out.println(num);

}

}

 

위에서 볼 수 있듯 반복문은 주석처리된 부분처럼 조건과 함께 기재해, 조건식을 생략하고 탈출할 수 있는 구문이다.

 

 Continue

 

반복문 내에서 조건문(if)과 같이 사용하며 true의 경우 이후 반복문 내부블럭의 다른 수행문을 수행하지 않는 기능이다.

 

예시) 

package ch21;

public class ContinueTest {

public static void main(String[] args) {

// 3의 배수가 아니면 아래 수행문 건너 띄기. 3의 배수만 수행하기.

int num;

for(num = 1; num <= 100; num++) {

 

if ( (num % 3) != 0) continue;

 

System.out.println(num);

}

}

}

위의 예시처럼 3의 배수에 해당하는 조건이라면 수행문을 건너띄고 다음 수행문을 수행한다.

 

오늘로써 온라인자바 기초강의 21강이 끝났다. 내일부턴 자바 객체지향입문으로 공부하려한다.

 

위 내용은 2020.12.20에 공부한 내용입니다. 

링크 : https://dudwls3278.tistory.com/17