반복문
코드들이 반복적으로 실행되도록 할 때 사용.
for
문, while
문, do-while
문
for
문과 while
문은 서로 변환이 가능하다.
-> for
문 : 반복 횟수를 알고 있을 때 주로 사용.
-> while
문 : 조건에 따라 반복할 때 주로 사용.
조건식이 참인 동안 주어진 횟수만큼 실행문을 반복적으로 실행.
예시
public class Main {
public static void main(String[] args) {
int sum = 0;
// for (초기화; 조건식; 증감식)
for(int num = 0; num < 10; num++) {
sum += num;
}
System.out.println(sum); // 1~9의 합인 45가 출력됩니다.
}
}
1) num이라는 변수를 선언하고, 초깃값으로 0을 대입.
2) num는 현재 10보다 작으므로(num < 10), 실행 블록 안의 코드가 최초로 수행.
3) 실행 블록을 빠져나오면 num이 1 증가(i++).
4) num은 현재 1.
여전히 10보다 작으므로, 실행 블록 안의 코드가 두 번째로 수행.
5) num이 9일때까지 반복.
6) num이 10이 되면 10보다 작다는 조건을 만족하지 못하므로, for문이 종료.
! 즉, 조건식을 충족하는 동안 초기화식부터 시작해서 증감식의 규칙을 따라서 실행
조건이 충족하지 않으면, 실행문을 실행하지 않고 끝남.
cf) i
: iterator (반복계수)
초기화 : for문이 시작할 때 최초 한 번만 수행되며, 사용할 변수의 초깃값을 정한다.
조건식 : 계속 반복할지 여부를 결정하는 조건.
조건식 안의 값이 true라면 실행문을 실행시키고, false라면 더 이상 블록을 실행하지 않고 끝난다.
증감식 : 반복 횟수를 결정하는 규칙.
변수에 값을 더하거나 곱하는 등 수행 방식을 지정한다. ++ 은 반복문에서 자주 쓰는 증감연산자로, 피연산자의 값을 1 증가시킨다.
초기화식이 필요 없을 경우, 초기화식 생략 가능.
초기화식이나 증감식이 둘 이상이 될 수 있다.
배열과 컬렉션 객체를 좀 더 쉽게 처리할 목적으로 자바에서 제공.
^특징^
향상된 for문은 반복실행을 하기 위해 카운터 변수와 증감식을 사용하지 않는다.
배열 및 컬렉션 항목의 개수만큼 반복하고 자동적으로 for문을 빠져나간다.
^ 예시 ^
public class EnhancedForLoop {
public static void main(String[] args) throws Exception {
String[] names = {"kimcoding", "javalee", "ingikim"};
for(String name : names) {
System.out.println(name + "님은 자바를 공부중 입니다.");
}
}
}
/*
kimcoding님은 자바를 공부중 입니다.
javalee님은 자바를 공부중 입니다.
ingikim님은 자바를 공부중 입니다.
*/
1) for문의 괄호() 안에 배열에서 꺼낸 항목을 저장할 변수 선언, 콜론( : ), 그리고 사용할 배열을 작성.
2) 처음 실행할 때, names 배열에서 가져올 첫번째 값이 존재하는지 확인.
3) 값이 존재하면 해당값을 변수인 name에 저장하고 그 안의 실행문을 실행.
4) 블록 내부의 실행문이 모두 실행 되면 다시 names 배열에서 가져올 값이 있는지 확인.
5) 만약 가져올 다음 항목이 없다면 자동적으로 for문이 종료.
조건식이 true일 경우에 계속해서 반복.
for문과 while문은 초기화, 증감식의 위치만 다를 뿐 상호 대체가 가능.
^특징^
초기화와 증감식은 필요가 없다면 생략할 수 있다.
(초기화);
while(조건식) {
실행문; //조건식이 참인 동안 실행
증감식;
}
^예시^
int num = 0, sum = 0;
while(num <= 10) {
sum += num; //sum = sum + num과 똑같은 식입니다. 복합 대입 연산자 "+="를 사용한 표현입니다.
num++;
}
System.out.println(sum);
1) num과 sum 이라는 정수 타입의 변수를 선언, 초기값으로 0 대입.
2) num은 현재 10보다 작으므로 블록 안의 코드가 수행.
3) sum이 현재의 num만큼 증가, num이 1 증가.
4) num은 현재 1. 여전히 10보다 작으므로, 실행 블록 안의 코드가 두 번째로 수행.
5) num이 10인 경우까지 반복.
6) num은 현재 11. 조건식이 거짓이므로 while문이 종료.
조건식에는 boolean 변수나 true / false 값을 산출하는 어떠한 연산식이든 올 수 있다.
BUT!
만약 조건식에 true를 사용하면 while(true) { ... } 가 되어서 무한 루프가 된다. 무한 루프는 무한히 반복하여 실행하기 때문에 언젠가는 while문을 빠져 나가기 위한 탈출 코드가 필요하다.
^예시^ : 무한 루프 탈출
public class Main {
public static void main(String[] args) {
boolean run = true;
int num = 1;
while(run){ // while(true) 조건문
num++; //실행문
System.out.println(num); //실행문
if(num == 22) { //조건문, num이 22가 되면 탈출! 얏호!
run = false;
}
}
}
}
while문과 동일하게 조건식에 의해 반복 실행한다.
1) 실행문을 먼저 실행합니다.
2) (1)실행문이 모두 실행되면 (2)조건식을 평가.
3) 그 결과가 true이면 (1)실행문 → (2)조건식으로 반복 실행을 하고, false이면 do-while문을 종료
^예시^
: 1~10 사이의 정수를 변수 randomNum에 저장하고 이 값을 맞출 때까지 반복하는 do-while문
import java.util.Scanner;
public class Main {
public static void main(String args[]){
int input = 0, randomNum = 0;
randomNum = (int)(Math.random() * 10) + 1; // 1 ~ 10 임의의 수를 생성
Scanner scanner = new Scanner(System.in);
do{
System.out.println("1과 10 사이의 정수를 입력하세요");
input = scanner.nextInt();
if(input > randomNum) {
System.out.println("더 작은 정수를 입력하세요");
} else if (input < randomNum) {
System.out.println("더 큰 정수를 입력하세요");
}
} while(input != randomNum);
System.out.println(randomNum +" 정답입니다!");
}
}