[Java] Ch04_2. 반복문 - for, while, do-while

토끼는 개발개발·2022년 1월 10일
0

Java

목록 보기
15/33
post-thumbnail

📌 Chapter04. 조건문과 반복문


✏️ 2. 반복문 - for, while, do-while


2.1 for문

for (초기화; 조건식; 증감식) {
      //조건식이 참일 때 수행될 문장들을 적는다.
}

  • 수행순서: 초기화 > 조건식 > 수행될 문장 > 증감식
  • 초기화, 조건식, 증감식 모두 생략 가능 => 참으로 간주되어 무한 반복문
for(int i=1; i<5; i++) { // 1부터 5까지 1씩 증가
	System.out.printf("%d%n",i);
}
//출력
1
2
3
4

▶ 초기화

  • 반복문에 사용될 변수를 초기화 하는 부분이며 처음에 한번만 수행된다.
  • 둘 이상의 변수가 필요할 때는 콤마','를 구분자로 변수를 초기화한다.
for (int i=1,j=0; i<=10; i++) { ... }

▶ 조건식

  • 조건식의 값이 참(true)이면 반복을 계속하고, 거짓(false)이면 반복을 중단하고 for문을 벗어난다.
  • 참인동안 블럭{} 안의 문장들을 반복
for(int i=1; i<=10; i++) { ... } // 'i<=10'가 참인 동안 블럭{}안의 문장들을 반복

▶ 증감식

  • 반복문을 제어하는 변수의 값을 증감시키는 식이다.
  • 매 반복마다 변수의 값이 증감식에 의해 점진적으로 변하다 결국 조건식이 거짓이 되어 for문을 벗어나게 된다.
  • 증감식도 콤마','를 이용해서 두 문장 이상을 하나로 연결해서 사용할 수 있다.
for(int i=1; i<=10; i++) { ... } // 1부터 10까지 1씩 증가
for(int i=1; i>=1; i--) { ... } // 10부터 1까지 1씩 감소
for(int i=1; i<=10; i+=2) { ... } // 1부터 10까지 2씩 증가

✨ 예제 1

public class FlowEx7 {

	public static void main(String[] args) {
		for(int i=1; i<=5; i++) {
			System.out.println(i);
		}
	}
}

✨ 예제 2

public class FlowEx8 {

	public static void main(String[] args) {
		int sum = 0; // 합계를 저장하기 위한 변수
		for (int i=1; i<=10; i++) {
			sum += i;
			System.out.printf("1부터 %2d 까지의 합: %2d%n", i,sum);
		}
	}

}


▶ 중첩 for문

  • for문 안에 또 다른 for문을 포함시키는 것도 가능하다.

✨ 예제 3

public class FlowEx9 {

	public static void main(String[] args) {
		for (int i=1; i<=5; i++){
			for (int j=1; j<=10; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

✨ 예제 4

public class FlowEx10 {

	public static void main(String[] args) {
		for (int i=1; i<=5; i++) {
			for (int j=1; j<=i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}

	}

}

▶ 향상된 for문

for (타입 변수명 : 배열 또는 컬렉션) {
      // 반복할 문장
}

for (int i=0, i<arr.length, i++) {
	System.out.println(arr[i]);
}
// 향상된 for문 변형
for (int tmp : arr) {
	System.out.println(tmp);
}



2.2 while문

while(조건식) {
     // 조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다.
}

  • 조건식이 참인동안 블럭{} 내 문장을 반복한다.
  • while문의 조건식은 생략불가
int i=1; // 초기화
while(i<=3) { //조건식
	System.out.println(i);
    	i++; // 증감식
}
//출력
1
2
3

✨ 예제 5

public class FlowEx11 {

	public static void main(String[] args) {
		int i=5;
		
		while(i--!=0) {
			System.out.printf("%d%n",i);
		}

	}

}



2.3 do-while문

do {
      // 조건식의 연산결과가 참일 때 수행될 문장들을 적는다.
} while (조건식);

  • while문과 반대로 블럭{}을 먼저 수행한 후에 조건식을 평가한다.
  • while문은 조건식의 결과에 따라 블럭{}이 한 번도 수행되지 않을 수 있지만 do-while문은 최소한 한번은 수행될 것을 보장한다.

✨ 예제 6

import java.util.*;

public class FlowEx12 {

	public static void main(String[] args) {
		int input = 0, answer = 0;
		
		answer = (int)(Math.random() * 100) + 1; // 1~100 임의의 수를 저장
		Scanner scanner = new Scanner(System.in);

		do {
			System.out.println("1과 100사이의 정수를 입력하세요.");
			input = scanner.nextInt();
			
			if(input > answer) {
				System.out.println("더 작은 수로 다시 시도해보세요.");
			} else if(input < answer){
				System.out.println("더 큰 수로 다시 시도해보세요.");
			}
		} while (input!=answer); 
		
		System.out.println("정답입니다.");
	}

}



2.4 break문

switch문에서처럼 break문은 자신이 포함된 가장 가까운 반복문을 벗어난다.


✨ 예제 7

public class FlowEx13 {

	public static void main(String[] args) {
		int sum = 0;
		int i = 0;
		
		while(true) {
			if(sum > 100)
				break; // break문이 실행되면 아래 두 줄을 수행하지 않고 while문을 완전히 벗어난다.
			++i;
			sum += i;
		} // end of while
		
		System.out.println("i=" + i);
		System.out.println("sum=" +sum);
	}

}



2.5 continue문

반복문 내에서만 사용할 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다. 반복문을 완전히 벗어나지 않는다는 점이 break문과 다르다.


✨ 예제 8

public class FlowEx14 {

	public static void main(String[] args) {
		for(int i=0; i<=10; i++) {
			if(i%3==0)
				continue; // 조건이 참이되어 continue문이 실행되면 블럭의 끝으로 이동
			System.out.println(i);
		} // 여기가 블럭의 끝 

	}

}



2.6 이름 붙은 반복문

break문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문이 중첩된 경우 break문으로 중첩 반복문을 완전히 벗어날 수 없다. 이때는 중첩 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 건너뛸 수 있다.


✨ 예제 9


public class FlowEx15 {

	public static void main(String[] args) {
		Loop1 : for(int i=2; i<=9; i++) { // for문에 Loop1이라는 이름을 붙였다.
				for(int j=1; j<=9; j++) {
					if(j==5)
						break Loop1;
					System.out.println(i+"*"+j +"="+ i*j);
				} // end of for i
				System.out.println();
		} // end of Loop1

	}

}


참고
자바의 정석(저자: 남궁성)


오늘의 한 줄

드디어 반복문을 자바문법으로 배웠다. do-while문은 파이썬에서 생소하므로 많은 연습이 필요할 것 같다.
어떤 부분이나 똑같겠지만 특히 반복문은 예제를 많이 연습해야 익숙해질 것 같다.
자바 문법을 다 배우면 코딩테스트를 자바문법으로 연습해서 좀 더 능숙하게 다뤄보도록 해야겠다.
내일부터는 배열에 들어간다.
배열을 마치면 드디어! 객체지향 프로그래밍 챕터에 들어간다.

profile
하이 이것은 나의 깨지고 부서지는 기록들입니다

0개의 댓글