[Java] while문 / do~while문 / break / continue

2021. 1. 19. 17:36Dev.Program/Java & Spring

728x90

======== Ex.java 만들기

p.131

2. while문

  • for문과 마찬가지로 특정 문장(또는 블록)을 반복 실행하는 반복문
  • for문과 달리 조건식의 위치만 정해져 있고, 초기식과 증감식 위치는 개발자가 알아서 배치하는 형태로 문장 구조가 다름
  • for문은 주로 반복 횟수가 정해져 있는 경우에 사용하며, while문은 주로 반복 횟수가 정해져 있지 않은 경우에 사용
  • for문과 while문은 상호 전환이 자유롭다.

 < 기본 문법 >

for(초기식; 조건식; 증감식) {
	// 조건식 결과가 true 일 때 반복 실행할 문장들...
}

> for 문

초기식; // 조건식보다 위(앞)에 위치해야함

while(조건식) {
    증감식; // 실행 문장보다 먼저 오거나
    // 조건식 결과가 true 일 때 반복 실행할 문장들...
    증감식; // 실행 문장 뒤에 올 수 있다(for문과 동일하게 실행되는 위치)
}

> while 문

 

문제 ) "Hello, World!" 문자열 10번 반복 출력하기

int i = 1;

for(i = 1; i <= 10; i++) {
	System.out.println(i + ". Hello, World!");
}

System.out.println("반복문 종료 후 i값 : " + i);

for 문 사용했을 때

int i = 1; // 초기식

while(i <= 10) { // 조건식
    // 조건식 판별 결과가 true일 때 반복 실행할 문장들...
    System.out.println(i + ". Hello, World!");
    i++; // 증감식(출력문 실행 후 증가해야하므로 출력문보다 아래쪽에 위치
}

System.out.println("반복문 종료 후 i값 : " + i);

while 문 사용했을 때

i = 0; // 초기식

while(i < 10) { // 조건식
    // 조건식 판별 결과가 true일 때 반복 실행할 문장들...
    i++; // 증감식
    System.out.println(i + ". Hello, World!");
}

System.out.println("반복문 종료 후 i값 : " + i);

> while 문을 이렇게 적을 수도 있는데 위와 다른 점은 반복문 종료 후 i 값이 다름

  • 만약, 증감식 위치가 달라질 경우 초기식과 조건식도 달라질 수 있다!
  • ex) 증감식이 출력문보다 먼저 실행되면 1 증가 후 출력되므로 0 부터 시작해야함.
  • 조건식이 i <= 10 일 경우 10 일 때 출력 후 11 까지 실행되므로 조건식을 i <= 9 또는 i < 10 으로 변경해야한다!

 

======== Test.java 만들기

문제 ) while 문을 사용하여 구구단의 특정 단을 출력

푼 답 = 선생님답

 

문제 ) while 문과 if문을 조합하여 1 ~ 10 까지 짝수의 합, 홀수의 합을 계산하여 출력

푼 답 = 선생님답

 

======== Ex2.java 만들기

p.132

< 중첩 while문 >

  • while 문 내에 또 다른 while 문을 기술하는 것

< 기본 문법 >

초기식1;

while(조건식1) { // 바깥쪽 while 문

    초기식2; // 바깥쪽 while 문 1번 반복할 때, 안쪽 while 문 초기식 초기화

	while(조건식2) {
		// 조건식2 의 판별 결과가 true 일 때 실행할 문장들...
		증감식2;      
	} 

    // 안쪽 while 문 반복이 끝난 후 바깥쪽 while 문 제어변수를 증감시킴 증감식1;
}

 

문제 ) i가 1 ~ 3까지 반복할 동안 i 반복 1회 당 j가 1 ~ 5까지 반복

int i = 1;

while(i <= 3) {
    System.out.println("i = " + i);

    int j = 1;

    while(j <= 5) {
        System.out.println("----- j = " + j);
        j++;
    }

    i++;
}

잘 모를 때는 i랑 j while문을 따로 적고 잘라내서 안으로 넣어주기 

 

 

======== Test2.java

문제 ) 중첩 while 문을 사용한 구구단 출력(2단 ~ 9단)

int dan = 2;

while(dan <= 9) {
    System.out.println(" < " + dan + "단 >");

    int i = 1;
    while(i <= 9) {
        System.out.printf("%d * %d = %d", dan, i, (dan * i));
        System.out.println();
        // System.out.println(dan + " * " + i + " = " + (dan * i));
        i++;
    }

    dan++;
    System.out.println(); // 줄바꿈
}
  • printf() 나 println() 중에 선택해서 쓰면 됨.

 

======== Ex3.java 만들기

p.133

< do ~ while 문 >

  • while 문과 달리 일단 문장을 한 번 실행한 후 반복문의 마지막에서 조건식을 판별하는 while 문
  • while 문은 조건식 판별 결과에 따라 문장이 단 한 번도 실행되지 않을 수 있지만,  do ~ while 문은 조건식 판별 여부와 관계없이 문장이 무조건 한 번은 실행됨


< 기본 문법 >

초기식;

do {
    // 반복 실행할 문장들...
    증감식;
} while(조건식); // 주의!! 마지막에 세미콜론(;) 필수!

while 문은 아무것도 출력되지 않았는데, do ~ while 문은 하나는 무조건 실행.

 

======== Ex4.java 만들기

p.134

< break 문  vs  continue 문 >

  • 반복문을 종료하거나 문장 실행을 생략하는데 사용되는 제어문

1. break 문

  • 현재 실행 중인 반복문을 종료하고 중괄호{} 를 빠져나가는 문
  • 주로 반복문 내에서 if문을 통해 조건 판별 후 반복을 종료할 때 조합하여 사용

2. continue 문

  • 현재 실행 중인 반복문 내에서 continue 문 아래쪽에 위치하는 모든 문장의 실행을 생략하고 다음 반복을 진행하는 제어문
  • 주로 반복문 내에서 특정 문장 실행을 생략할 때 사용

 

문제 1 ) 1 ~ 100 까지의 합계를 구하라 (for문으로)

문제 2 ) 합계(sum) 가 100을 초과할 때 i 값을 출력

// 1 ~ 100 까지의 합계를 누적
// 단, 합계(sum) 가 100을 초과할 때 누적을 중단한 후, i 값을 출력
int i = 1;
int sum = 0;

for(i = 1; i <= 100; i++) {
    System.out.print(i + " ");
    sum += i;

    if(sum > 100) { // 합계(sum)가 100을 초과할 경우
        break; // for문을 종료하고 for문 아래쪽 실행문으로 빠져나감
    }
}

// break 문을 만나면 실행할 문장 위치
System.out.println();
System.out.println("합계 : " + sum);
System.out.println("1 ~ 100 까지 합계 누적 중 100을 초과할 때 i값 : " + i);
  • break → for 문을 종료하고 빠져나옴
sum = 0;

for(i = 1; i <= 10; i++) {
    if(i == 5) {
        // break; // i가 5이면 현재 반복문 종료(1 ~ 4 까지의 합 계산)
        continue; // i가 5이면 아래쪽 반복 문장 생략 후 증감식으로 이동
        // (1 + 2 + 3 + 4 + 6 + 7 + 8 + 9 + 10 합 계산 = 5 제외)
    }

    sum += i;
}

System.out.println("합계 : " + sum);
  • continue → 5를 제외하고 마저 실행! 멈추는게 아님!

실행창

 

728x90