본문 바로가기
Java/Java

반복문) while문, do-while문, while문 무한루프

by 박채니 2022. 3. 7.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


☞ while문

- 특정 조건까지 반복하고자 할 때 주로 사용

//기본구문
초기식;
while(조건식) {
	//반복실행구문
	증감식;
}
int i = 0;
while(i < 10) {
	System.out.print(i + " ");
	i++;
}

@콘솔출력값
0 1 2 3 4 5 6 7 8 9

while문이 실행되면

조건식(t) → 실행구문 실행 → 증감식 실행(위 코드의 경우)

→ 조건식(t) → 실행구문 실행 .... 반복 →  조건식(f) while문 탈출

위와 같은 실행 순서를 갖게 됩니다.

 

'0번째부터 i가 10보다 작을 동안 i를 출력하라' 라는 의미를 가진 while문이 실행되는 것이죠.

 

/**
	 * 1 ~ 20까지 출력
	 * 20 ~ 1까지 출력
	 * 11 ~ 15까지 출력
	 * 홀수만 20까지 출력
	 * 짝수만 20~2까지 출력
	 */
public void test2() {
	int i = 1;
	while(i <= 20) {
		System.out.print(i + " ");
		i++;
	}
	System.out.println();
		
	i = 20;
	while(i >= 1) {
		System.out.print(i + " ");
		i--;
	}
	System.out.println();
		
	i = 11;
	while(i <= 15) {
		System.out.print(i + " ");
		i++;
	}
	System.out.println();
		
	i = 1;
	while(i <= 20) {
		System.out.print(i + " ");
		i+=2;
	}
	System.out.println();
		
	i = 20;
	while(i >= 1) {
		if(i % 2 == 0)
			System.out.print(i + " ");
		i--;
	}
}

@콘솔출력값
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 
11 12 13 14 15 
1 3 5 7 9 11 13 15 17 19 
20 18 16 14 12 10 8 6 4 2

※ while문의 경우, 초기식이 while문 밖에 위치하기 때문에 while문이 끝나도 초기 변수(i)는 살아있습니다.

따라서 각 상황에 따라 i의 값을 대입해주었습니다.

 

 

1부터 사용자 입력 정수까지 3의 배수의 합 구하기

public void test3() {
	Scanner sc = new Scanner(System.in);
	System.out.print("> 정수를 입력하세요 : ");
	int inum = sc.nextInt();
		
	//누적변수
	int sum = 0;
		
	int i = 1;
	while(i <= inum) {
		if(i % 3 == 0)
			sum+=i;
		i++;
	}
	System.out.println(sum);
}

@콘솔출력값
> 정수를 입력하세요 : 10
18

누적 변수는 while문 밖에 선언하여 합을 구해주었습니다.

 

☞ do-while문

- 실행 구문을 실행 한 후 조건식 검사하므로 최소 반복 횟수가 1

- 조건식뒤에 중괄호가 없으므로 세미콜론(;)으로 끝남

//기본구문
초기식;
do {
	//반복실행구문
    증감식;
} while(조건식);
int i = 10;
do {
	//최초 1회 실행        
	System.out.println(i);
}while(i < 10);

//while문은 실행 안됨 (조건이 false기 때문)
while(a < 10) {
	System.out.println("실행구문");
}

@콘솔출력값
10
출력없음

do-while문은 조건식을 검사하기 전에 do {실행구문}을 반드시 최초 1회 실행하기 때문에 실행구문을 먼저 출력하고 조건식을 검사한 후 조건이 true면 반복, false면 do-while문을 탈출합니다.

따라서 같은 코드여도 do-while문은 10이 출력되었지만, while문은 조건이 false이므로 출력이 안 되었습니다.

 

 

사용자 입력 값을 받아 해당 단의 구구단 출력

(더 할 지 여부를 물어 반복 처리)

public void test5() {
	Scanner sc = new Scanner(System.in);
		
	char choice = ' ';
	do {
		gugudan();
		System.out.print("더 하시겠습니까?(y|n) : ");
		choice = sc.next().charAt(0);
		//choice가 n이면 false이므로 종료
	} while(choice == 'y');
	System.out.println("구구단을 종료합니다.");
}
	
public void gugudan() {
	Scanner sc = new Scanner(System.in);
		
	System.out.print("> 단을 입력하세요(2~9) : ");
	int dan = sc.nextInt();
	
	if(dan < 2 || dan > 10) {
		System.out.println("잘못 입력하셨습니다. 프로그램을 종료합니다.");
		//gugudan메소드를 호출한 곳으로 이동 (test5)
		return;
	} else {
		for(int i = 1; i < 10; i++) {
			System.out.printf("%d X %d = %d\n", dan, i, dan*i);
		}
	}
}

@콘솔출력값
> 단을 입력하세요(2~9) : 2
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
더 하시겠습니까?(y|n) : y
> 단을 입력하세요(2~9) : 3
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
더 하시겠습니까?(y|n) : n
구구단을 종료합니다.

 

☞ while문 무한루프

- while의 조건식이 true이면 실행 구문을 무한 반복 실행

- while은 조건식 생략이 불가하여, 무한루프 시 반드시 true를 기입해야함

public void test6() {
	Scanner sc = new Scanner(System.in);
		
	char choice = ' ';
	while(true) {
		gugudan();
		System.out.print("더 하시겠습니까?(y|n) : ");
		choice = sc.next().charAt(0);
		if(choice == 'n') 
			break;
	}
	System.out.println("구구단을 종료합니다.");
}
	
public void gugudan() {
	Scanner sc = new Scanner(System.in);
		
	System.out.print("> 단을 입력하세요(2~9) : ");
	int dan = sc.nextInt();
		
	if(dan < 2 || dan > 10) {
		System.out.println("잘못 입력하셨습니다. 프로그램을 종료합니다.");
		//gugudan메소드를 호출한 곳으로 이동 (test5)
		return;
	} else {
		for(int i = 1; i < 10; i++) {
			System.out.printf("%d X %d = %d\n", dan, i, dan*i);
		}
	}
}

@콘솔출력값
> 단을 입력하세요(2~9) : 2
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
더 하시겠습니까?(y|n) : y
> 단을 입력하세요(2~9) : 3
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
더 하시겠습니까?(y|n) : n
구구단을 종료합니다.

동일한 코드(do-while)를 while 무한루프로 구현해보았습니다.

결과는 동일합니다.