for문의 구조
for(초기식; 조건식; 증감식){
반복해서 수행할 문장
}
초기식 : 새로운 변수의 선언 (for문 내부에서 사용 가능)
조건식 : 조건식이 참인 경우에 반복을 계속하며, for문을 반복 할때마다 항상 조건식 검사한다.
증감식 : 변수의 값을 증가 혹은 감소시키는 식
public class Main {
public static void main(String[] args) {
// 1부터 10까지의 합
int sum = 0; // 합을 저장할 sum 변수를 0으로 초기화한다.
for(int i = 1; i<=10; i++) {
sum += i; // i를 1부터 10까지 반복하며 sum에 누적저장한다.
}
System.out.println(sum); // 55 출력
}
}
향상된 for문의 구조
for( 타입변수명 : 배열 또는 컬렉션){
반복해서 수행할 문장
}
여기서 타입변수명은 배열 또는 컬렉션의 요소의 타입이어야 한다.
변수가 배열이나 컬렉션 안에 있는 요소들을 전부 가져오면서 반복한다.
public class Main {
public static void main(String[] args) {
int arr[] = {1,2,3,4,5,6,7,8,9,10}; // 1부터 10까지의 요소를 가진 배열 arr 생성
int sum = 0; // 합을 저장할 sum 변수 0으로 초기화
for(int i : arr ) {
sum += i; // 배열에 있는 요소들을 하나씩 읽어와서 sum에 누적 저장
}
System.out.println(sum); // 55 출력
}
}
while문의 구조
while(조건식) {
조건식이 참일 때 반복할 문장
}
public class Main {
public static void main(String[] args) {
int i = 0; // 변수 i를 0으로 초기화
int sum = 0; // 합을 저장할 sum을 0으로 초기화
while(i<=10) { // i가 10 이하일때만 반복문 수행
sum += i; // sum 변수에 i 저장
i++;
}
System.out.println(sum); // 55 출력
}
}
while문의 조건식은 생략이 불가능하고, 조건식에 true 자체를 넣어서 무한으로 반복하게 만들 수 있다.
do-while문의 구조
do{
조건식의 연산결과가 참일 때 반복할 문장
} while(조건식);
while문과 순서가 반대로 되어있어 첫번째 반복 수행시 조건식보다 실행할 문장을 먼저 만난다. 따라서 최초 한번은 무조건 do 블럭 안에 문장이 실행된다.
public class Main {
public static void main(String[] args) {
int i = 5; // int타입의 변수 i를 5로 초기화
do {
System.out.println(i+5);
}while(i<5);
// do안에 문장을 처음 한번 실행한 후 조건이 false라는것이 판별되므로
// 10이 한번 출력된다.
while(i<5) {
System.out.println(i+5);
}
// 조건식이 false라는것이 먼저 판별되므로 아무것도 출력되지 않는다.
}
}
break : 자신이 포함된 가장 가까운 반복문을 종료한다.
continue : 반복문의 끝으로 이동해 다음 반복을 계속 수행한다.
public class Main {
public static void main(String[] args) {
int i = 0;
while(true) { // 조건식에 true를 넣어 무한반복
i++;
if(i%2 == 0) { // i가 짝수일때 continue
continue;
}
if(i>10) { // i가 10보다 클때 break
break;
}
System.out.println(i); // 1 3 5 7 9 출력
}
}
}
위의 식은 i를 1씩 증가시키며 반복을 수행한다. 그런데
i%2 == 0일때 즉, i가 짝수일때는 continue를 붙여 i가 짝수일때는 그 아래의 문장을 실행하지 않고 새로 반복을 시작하는 것이다. 따라서System.out.println(i);문장을 만나지 않아 짝수는 출력되지 않는 것이다.여기서 주의할 점은
while(true)같이 무한루프를 만들었을 때는if(i>10){break;}처럼 반복문을 종료할 수 있는 조건을 가진break문을 꼭 써줘야 한다는 것이다.
break 문은 가장 근접한 반복문을 멈춘다고 했는데, 다중 반복문에서 다른 반복문을 멈추고 싶다면 반복문에 이름을 붙여서 지정할 수 있다.
public class Main {
public static void main(String[] args) {
loop1 : for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.println("i = "+ i + " j = " + j);
if(j==4) {
break loop1;
}
}
}
}
}
// 결과
// i = 0 j = 0
// i = 0 j = 1
// i = 0 j = 2
// i = 0 j = 3
// i = 0 j = 4
위의 식에서 바깥쪽 for문에 loop1이라는 이름을 붙였다. 그리고 이중 for문을 돌면서 j가 4일때 loop1을 종료하게 만들었다. 먼저 i =0일대 j가 포함된 for문을 돌기 시작할 것이고 j가 4가 되었을때 반복문이 종료될 것이므로 결과가 위와 같이 나올 것이다.