본문 바로가기
프로그래밍언어/Java

04-2. for문, while문, do-while문

by 스꼬맹이브로 2021. 1. 12.
728x90
반응형
SMALL

제어문 블록이 실행 완료되었을 때 조건문은 정상 흐름으로 돌아오지만, 반복문일 경우는 제어문 처음으로 다시 되돌아가 반복 실행(루핑-looping)한다.

 

<for문>

주어진 횟수만큼 실행문을 반복 실행할 때 적합한 반복 제어문

  1. for문이 처음 실행될 때 초기화식(①)이 제일 먼저 실행됨
  2. 조건식(②)을 평가해서 true이면 for문 블록 내부의 실행문(③)을 실행하고,
    false이면 for문 블록을 실행하지 않고 종료
  3. 블록 내부의 실행문(③)들이 모두 실행되면 증감식(④)을 실행하고 다시 조건식(②)을 평가
  4. 조건식(②)의 평가 결과가 true이면 실행문(③) → 증감식(④)  조건식(②)으로 다시 진행하며,
    false일 경우 for문 종료
public class ForPrintFrom1To10Example {
	public static void main(String[] args) {
		for(int i=1; i<=10; i++) {
			System.out.println(i);
		}
	}
}

결과 : 

 

* 초기화식 = 조건식과 실행문, 증감식에서 사용할 변수를 초기화하는 역할(필요 없을 경우 생략 가능)

* 초기화식이 둘 이상 있을 수 있고, 증감식 역시 둘 이상 있을 수 있음

--주의할 점--

for문 초기화식에서 루프 카운터 변수를 선언할 때 부동 소수점을 쓰는 float타입 사용 금지

이유 : 0.1은 float타입으로 정확하게 표현할 수 없기 때문에 10번 반복으로 선언해도 9번만 돌게 됨.

public class ForFloatCounterExample {
	public static void main(String[] args) {
		for(float x=0.1f; x<=1.0f; x+=0.1f) {
			System.out.println(x);
		}
	}
}

결과 : 

<중첩 for문>

for문 안에 또 다른 for문을 내포한 것.

→ 바깥쪽 for문이 한 번 실행할 대마다 중첩된 for문은 지정된 횟수만큼 반복해서 돌다가 다시 바깥쪽 for문으로 돌아감

 

ex) 구구단 출력

public class ForMultiplicationTableExample {
	public static void main(String[] args) {
		for (int m=2; m<=9; m++) {
			System.out.println("*** " + m + "단 ***");
			for (int n=1; n<=9; n++) {
				System.out.println(m + " x " + n + " = " + (m*n));
			}
		}
	}
}

결과 :

 

<while문>

조건식이 true일 경우에 계속해서 반복

조건식에는 boolean타입 변수나 true/false 값을 산출하는 어떠한 연산식이든 가능함

만약 조건식에 true를 사용하면 무한 루프 발생

 

  1. while문이 처음 실행될 때 조건식(①)을 평가
  2. 평가 결과가 true이면 실행문(②)을 실행
  3. 실행문(②)이 모두 실행되면 조건식으로 되돌아가서 다시 조건식(①)을 평가
  4. 조건식이 true이면 실행문(②) → 조건식(①)으로 다시 진행
  5. 조건식이 false라면 while문 종료
public class WhileSumForm1To100Example {
	public static void main(String[] args) {
		int sum = 0; 
		int i = 1;
		
		while(i<=100) {
			sum += i;
			i++;
		}
		
		System.out.println("1~" + (i-1) + " 합 : " + sum);
	}
}

결과 : 

 * 이때, 계속 누적되는 값을 갖는 루프 카운터 변수는 while문이 시작하기 전에 미리 선언해야 함

 

<do-while 문>

조건식에 의해 반복 실행한다는 점에서는 while문과 동일하지만,
블록 내부의 실행문을 우선 실행하고 실행 결과에 따라 반복 실행을 계속할지 결정하는 점에서 다르다.

  1. do-while문이 처음 실행될 때 실행문(①)을 우선 실행
  2. 실행문(①)이 모두 실행되면 조건식(②)을 평가
  3. 조건식의 결과가 true이면 실행문(①) → 조건식(②)과 같이 반복 실행
  4. 조건식의 결과가 false이면 do-while문 종료

--주의할 점--

작성 시 while() 뒤에 반드시 세미콜론(;)을 붙여야 함

 

<break문>

반복문인 for문, while문, do-while문의 실행을 중지할 때 사용

switch문에서도 break문 사용하여 switch문 종료

break문의 실행 흐름으로 대개 if문과 같이 사용되어 if문의 조건식에 따라 for문과 while문을 종료할 때 사용

public class  BreakExample {
	public static void main(String[] args) throws Exception {
		while(true) {
			int num = (int)(Math.random()*6) + 1; //대충 랜덤 수를 뽑는 함수
			System.out.println(num);
			if(num == 6) {
				break;
			}
		}
		System.out.println("프로그램 종료");
	}
}

결과 :

* 반복문이 중첩된 경우 가장 가까운 반복문만 종료 → 바깥쪽 반복문까지 종료시키려면 라벨(Label) 사용

public class  BreakOutterExample {
	public static void main(String[] args) throws Exception {
		Outter: //Label
		for(char upper='A'; upper<='Z'; upper++) {
			for(char lower='a'; lower<='z'; lower++) {
				System.out.println(upper + "-" + lower);
				if(lower=='g') {
					break Outter; 
				}
			}
		}
		System.out.println("프로그램 실행 종료");
	}
}

결과 :

 

<continue문>

반복문인 for문, while문, do-while문에서만 사용

블록 내부에서 continue문이 실행되면 for문의 증감식 또는 while문, do-while문의 조건식으로 이동

반복문을 종료하지 않고 계속 반복을 수행한다는 점이 break문과 다른 점

break문과 마찬가지로 대개 if문과 같이 사용(특정 조건 만족 시 그 이후의 문장을 수행하지 않고 다음 반복으로 넘어감)

public class  ContinueExample {
	public static void main(String[] args) throws Exception {
		for(int i=1; i<=10; i++) {
			if(i%2 != 0) {
				continue;
			}
			System.out.println(i);
		}
	}
}

결과 :

 

728x90
반응형
LIST

'프로그래밍언어 > Java' 카테고리의 다른 글

05-2. 배열  (0) 2021.01.19
05-1. 참조 타입과 참조 변수  (0) 2021.01.18
04-1. if문, switch문  (0) 2021.01.11
03-2. 연산자의 종류  (0) 2021.01.08
03-1. 연산자와 연산식  (0) 2021.01.05