[자바] 기초문법정리(240102)

brand_mins·2024년 1월 2일

Java

목록 보기
31/47

1. 반복문

package loop;

public class While1_1 {

    public static void main(String[] args) {
        int count = 0;

        count = count + 1;
        System.out.println("현재 숫자는:" + count);
        count = count + 1;
        System.out.println("현재 숫자는:" + count);
        count = count + 1;
        System.out.println("현재 숫자는:" + count);
    }
}
  • 같은 코드를 3번 작성함. 수작업으로 작성하는 것보다는 반복문을 실행해야함.

1) While문

  • 조건에 따라 코드를 반복해서 실행할때 사용
  • 조건식이 참일때 무한 반복하고 거짓일때 벗어난다.
while(조건식) {
	// 실행할 코드
}
package loop;

public class While1_2 {

    public static void main(String[] args) {
        int count = 0;
        
        // count 값이 3일때 while문이 종료된다.
        while(count < 3) {
            count = count + 1;
            System.out.println("현재 숫자는:" + count);
        }
    }
}

(1) 문제: while문을 사용하지 않고 1부터 하나씩 증가하는 방식(1~3 더하기)

package loop;

public class While2_1 {

    public static void main(String[] args) {
        int sum = 0;
        int i = 1;

        sum = sum + 1;
        System.out.println("i=" + i + ", sum=" + sum);
        i++;

        sum = sum + 2;
        System.out.println("i=" + i + ", sum=" + sum);
        i++;

        sum = sum + 3;
        System.out.println("i=" + i + ", sum=" + sum);
    }
}
  • 이 코드에서 while문을 사용해서 i부터 하나씩 증가하는 수를 endNum(마지막 수)까지 더하는 코드를 바꿔보자
package loop;

public class While2_3 {

    public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        int endNum = 3;

        while (i <= endNum) {
            sum = sum + i;
            System.out.println("i=" + i + ", sum=" + sum);
            i++;
        }
    }
}
  • 반복 횟수 정하기.
    즉, i가 endNum이 될때까지 반복해서 코드를 실행함.

2) do-while문

  • 조건에 상관없이 무조건 실행되는 반복문
package loop;

public class DoWhile1 {

    public static void main(String[] args) {
        int i = 10;
        do {
            System.out.println("현재 숫자는: " + i);
            i++;
        }
        while(i < 3);
    }
}
  • do 코드블록을 한번 실행하고 마지막 while 조건을 검사하는 코드

3) break, continue

  • break, continue는 반복문에서 사용됨
  • break는 반복문을 즉시 종료하고 continue는 반복문 나머지 부분을 건너뛴다.

(1) break

while(조건식) {
	코드1;
    break; // 즉시 while문 종료
    코드2;
}
package loop;

public class Break1 {
    public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        
        while(true) {
            sum = sum + i;
            if(sum > 10) {
                System.out.println("합이 10보다 크면 종료: i=" + i + ",  sum=" + sum);
                break;
            }
            i++;
        }
    }
}
  • 조건식을 보면 while 조건식이 true로 되어있음.
  • 조건이 참이기 때문에 break가 없으면 무한반복
  • 만약 sum > 10 조건을 만족하면 결과 출력하고 break를 사용해서 while문을 벗어난다.

(2) continue

while(조건식) {
	코드1;
    continue; // 즉시 조건식 이동
    코드2;
}
- 1부터 5까지 숫자를 출력하는데 숫자가 3일때는 출력을 건너뛴다
package loop;

public class Continue1 {
    public static void main(String[] args) {
        int i = 1;

        // i=1,2,3
        while(i <= 5) {
            if(i == 3) {
                i++;
                continue; // 조건식으로 이동하면 아래 코드는 무시되고 위의 while문으로 이동한다.
            }
            System.out.println(i);
            i++;
        }
    }
}

4) for문

  • 주로 반복횟수가 정해져 있을때 사용함
  • for문 구조
for(1. 초기식 2. 조건식 4. 증감식) {
	// 3. 코드
}
1. 초기식 실행. 초기식은 1번만 실행
2. 조건식을 검증한다. 참이면 코드 실행, 거짓이면 for문 벗어남
3. 코드 실행
4. 코드가 종료되면 증감식 실행
5. 다시 2. 조건식부터 시작
package loop;

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

(1) i부터 하나씩 증가한 수를 endNum까지 더하기(for문사용)

package loop;

public class For2 {

    public static void main(String[] args) {
        int sum = 0;
        int endNum = 3;

        for(int i=1; i<=endNum; i++) {
            sum = sum + i;
            System.out.println("i=" + i + ", sum=" + sum);
        }
    }
}

(2) for vs while

  • for문은 초기화, 조건 검사, 반복 후 작업 등이 규칙적으로 한 줄에 표시되어 있어 코드를 이해하기 편리함.
for(int i=1; i<=endNum; i++) {
	// 코드
}
  • i는 카운터 변수. 증가하면서 반복횟수 올라가고 i를 활용해서 반복할지 말지를 판단할 수 있음.
  • while은 변수 i를 선언하는 부분과 i++ 증가하는 부분이 분산되어 있음.

(3) for문 구조

package loop;

public class Break2 {

    public static void main(String[] args) {
        int sum = 0;
        int i = 1;

        for(; ;) {
            sum += i;
            if(sum > 10) {
                System.out.println("합이 10보다 크면 종료: i=" + i + ", sum=" + sum);
                break;
            }
            i++;
        }
    }
}
  • for(; ;)는 조건식이 없으므로 무한반복.
  • sum > 10 조건을 만족하면 break를 사용해서 반복문 벗어남

5) 중첩 반복문

  • 반복문은 내부에 또 반복문을 만들 수 있다.
package loop;

public class Nested1 {

    public static void main(String[] args) {
        for(int i=0; i<2; i++) {
            System.out.println("외부 for시작 i:" + i);
            for(int j=0; j<3; j++) {
                System.out.println("내부 for시작 j:" + i + "-" + j);
            }
            System.out.println("외부 for 종료 i:" + i);
        }
    }
}

어려웠던 코드 : 피라미드

package loop.ex;

public class NestedEx2 {

    public static void main(String[] args) {
        int rows = 5;

        for(int i=1; i<=rows; i++) {
            for(int j=1; j<=i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }

    }
}

정리

  • while vs for
for문
<장점>
1. 초기화, 조건 체크, 반복 후 작업, 증감식을 한번에 처리할 수 있음
2. 정해진 횟수만큼 반복한다.
3. 루프 범위가 for문 블록에 제한.

<단점>
1. 루프 조건이 루프 내부에서 변경되는 경우 for문 관리 어렵
2. 복잡한 조건을 가진 반복문을 작성하기에 while문이 더 적합
while문
<장점>
1. 루프 조건이 루프 내부에서 변경되는 경우
2. for루프보다 더 복잡한 조건을 while문에서 사용할 수 있음
3. 조건이 충족되는 동안 계속해서 루프 실행. 종료 시점을 명확히 알 수 없음.

<단점>
1. 초기화, 반복 후 작업이 분산되어 있음.
2. 루프 변수가 while문 블록 바깥으로 접근 가능
profile
IT 개발자가 되기 위한 기록

0개의 댓글