[JAVA] 3. Iteration_반복문

말랑이·2023년 6월 19일
0

JAVA

목록 보기
8/13
post-thumbnail

1 반복문

💛 반복문(Iteration) : 작업이 반복적으로 수행되도록 할 때 사용

  • for문 + while문 + do-while문

  • for문 : 반복횟수를 알고 있을 때 사용

  • while문 : 반복횟수를 모를 때 사용


2 for문

💛 for문

  • 조건식 True인 동안 → 블럭 { } 문장들을 반복
  • 조건식 False반복문 벗어남

1️⃣ for문 구조

for (초기화; 조건식; 증감식) {
	// 조건식이 True일 동안 수행될 문장
}
class Iteration1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 3; i++) {
            System.out.println("Hello, Mallang!");
        }
    }
}
  • 초기화, 조건식, 증감식 → 모두 생략가능 ✅

  • 조건식 생략 → True로 간주 ➡️ 무한반복문 주의 🚨

2️⃣ 초기화

  • 반복문에 사용될 변수 → 초기화하는 부분

  • 처음에 한번만 수행됨 ✅

  • 보통 변수 1개, but 여러개도 가능

    • 변수 type일치 조건
for (int i = 1; i <= 10; i++) {} // 초기화변수 1개
for (int i = 1, j = 0; i <= 10; i++) {} // 초기화변수 2개

3️⃣ 조건식

조건식 값수행
True계속 반복 수행
False반복중단 → for문 벗어남

4️⃣ 증감식

  • 반복문을 제어하는 변수 값 → 증가 or 감소

  • 매 반복마다 변수값 증감 → 조건식 False ➡️ for문 벗어남

for (int i = 1; i <= 10; i++) {} // 1 ~ 10 1씩증가
for (int i = 10; i >= 1; i--) {} // 10 ~ 1 1씩감소
for (int i = 1; i <= 10; i += 2) {} // 1 ~10 2씩증가
for (int i = 1; i <= 10; i *= 3) {} // 1 ~ 10 3배씩증가

5️⃣ Java code

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

        for (int i = 1; i <= 5; i++) {
            System.out.print(i); // 가로출력
        }

        System.out.println();
    }
}
class Iteration3 {
    public static void main(String[] args) {
        int sum = 0;

        for (int i = 1; i <= 5; i++) {
            sum += i;
            // %2d -> 2자리 10진정수
            System.out.printf("1부터 %2d 까지의 합 : %2d%n", i, sum);
        }
    }
}

3 중첩 for문

💛 중첩 for문 : for문 안에 또다른 for문 포함시키는 것

class Iteration4 {
    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();
        }
    }
}

4 while문

💛 while문 : 조건이 True인 동안 (조건식이 False될 때까지) → 블럭 { } 내 문장 반복

1️⃣ while문 구조

while (조건식) {
	// 조건식 연산결과 → True인동안, 반복될 문장
}
  • 조건식 True → 블럭 { } 안으로 들어감

  • 조건식 False → while문 벗어남

  • 블럭 { } 수행 → 다시 조건식으로 돌아감

2️⃣ for문 while문 비교

반복문차이점
for문변수 if로 반복횟수 지정 → 반복때마다 { } 내용수행
while문조건식 True인 동안 → { } 내용 반복수행

3️⃣ Java code

class Iteration5 {
    public static void main(String[] args) {
        int i = 5; // 초기화

        while (i-- != 0) { // 조건식 (후위형)
            // 조건식에서 평가된 후 -> 1감소하여 i 출력됨
            System.out.println(i + " - I can do it!");
        }
    }
}
class Iteration6 {
    public static void main(String[] args) {
        int num = 0, sum = 0;

        System.out.print("숫자를 입력하시오 (ex. 12345) >>> ");

        Scanner scanner = new Scanner(System.in);
        String userData = scanner.nextLine();

        num = Integer.parseInt(userData);

        // num % 10 -> 마지막자리 출력
        // num / 10 -> 마지막자리 제거
        while (num != 0) {
            sum += num % 10;
            System.out.printf("sum = %3d num = %d%n", sum, num);

            num /= 10;
        }
        System.out.println("각 자리수 합 : " + sum);
    }
}

5 do-while문

💛 do-while문 : while문 변형 → 조건식과 블럭 { } 순서를 바꿔놓은 것

1️⃣ do-while문 구조

do {
	// 조건식 연산결과 True일때, 수행될 문장
    // 처음 한번은 무조건 실행됨
} while (조건식);

2️⃣ do-while문 특징

  • 블럭 { } 무조건 한번 실행 → 조건식 평가

  • while문 → 조건식 결과에 따라, 블럭 { } 한번도 실행 안될 수 있음 ⛔️

  • do-while문 → 조건식 결과와 상관없이, 블럭 { } 최소한 한번 수행 보장 ✅

3️⃣ Java code

class Iteration7 {
    public static void main(String[] args) {
        int input = 0, answer = 0;

        // 1~100 난수 저장
        answer = (int)(Math.random() * 100) + 1;

        Scanner scanner = new Scanner(System.in);

        do {
            System.out.print("1과 100사이의 정수를 입력하시오 >>> ");
            input = scanner.nextInt();

            if (input > answer) {
                System.out.println("더 작은수로 다시 시도하시오.");
            } else if (input < answer) {
                System.out.println("더 큰수로 다시 시도하시오.");
            }
        } while (input != answer);

        System.out.println("정답입니다!");
    }
}

6 break문

💛 break문 : 자신이 포함된 가장 가까운 반복문을 벗어남

1️⃣ break문 활용

  • 무한반복문 → 주로 if문과 함께 사용
    ➡️ 특정조건 만족 시, 반복문 벗어남

  • 무한반복문 → 조건문 + break문 함께 사용

2️⃣ Java code

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

        while (true) { // 무한반복
            if (sum > 100) // 조건문 + break문 -> 무한반복 벗어남
                break;

            ++i;
            sum += i;
        }

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

7 continue문

💛 continue문

  • 반복문 내에서만 사용
  • 반복문 진행 중 continue문 → 반복문 끝으로 이동 → 다음 반복으로 넘어감

1️⃣ continue문 특징

  • 반복문 전체를 벗어나지 않음 ⛔️, 다음 반복을 계속 수행 ✅
    ➡️ break문과의 차이점

  • if문 특정조건 만족 → continue문 이후 문장 수행 ❌ → 다음반복으로 넘어감

  • 전체 반복 중, 특정조건을 만족하는 경우를 제외하고자할 때 유용 ⭐️

2️⃣ continue문 규칙

반복문종류이동목적지
for문증감식으로 이동함
while, do-while문조건식으로 이동함

3️⃣ Java code

class Iteration9 {
    public static void main(String[] args) {
        int menu = 0;
        int num = 0;

        Scanner scanner = new Scanner(System.in);

        while (true) { // 무한반복문
            System.out.println("(1) square");
            System.out.println("(2) square root");
            System.out.println("(3) log");
            System.out.print("원하는 메뉴 (1 ~ 3)를 선택하시오 (종료 : 0) >>> ");

            String userData = scanner.nextLine();
            menu = Integer.parseInt(userData);

            if (menu == 0) {
                System.out.println("프로그램을 종료합니다.");
                break;
            } else if (! (1 <= menu && menu <= 3)) {
                System.out.println("메뉴를 잘못 선택하셨습니다. (종료 : 0)");
                continue;
            }

            System.out.println("선택하신 메뉴는 " + menu + "번 입니다.");
        }
    }
}

8 이름붙은 반복문

💛 이름붙은반복문 : 중첩반복문, break문, continue문 → 이름지정

1️⃣ 이름붙은반복문 목적

  • break문 : 근접한 단 하나의 반복문만 벗어남

  • 여러개의 반복문이 중첩된 경우 → break문으로 완전히 벗어날 수 없음

  • 중첩반복문, break문, continue문 이름지정 → 하나 이상의 반복문 벗어나거나 건너뜀

2️⃣ Java code

class Iteration10 {
    public static void main(String[] args) {
        Loop1 : for (int i = 2; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                if (j == 5) {
                    break Loop1;
                }

                System.out.println(i + "*" + j + "=" + i*j);
            }
        }
    }
}
class Iteration11 {
    public static void main(String[] args) {
        int menu = 0, num = 0;

        Scanner scanner = new Scanner(System.in);

        // while문 : outer
        outer:
        while (true) {
            System.out.println("(1) square");
            System.out.println("(2) square root");
            System.out.println("(3) log");
            System.out.print("원하는 메뉴 (1 ~ 3)를 선택하시오 (종료 : 0) >>> ");

            String userData = scanner.nextLine();
            menu = Integer.parseInt(userData);

            if (menu == 0) {
                System.out.println("프로그램을 종료합니다.");
                break;
            } else if (! (1 <= menu && menu <= 3)) {
                System.out.println("메뉴를 잘못 선택하셨습니다. (종료 : 0)");
                continue;
            }

            // 무한반복문
            for (;;) {
                System.out.print("계산할 값을 입력하시오 (계산종료 : 0, 전체종료 : 99) >>> ");

                userData = scanner.nextLine();
                num = Integer.parseInt(userData);

                if (num == 0) {
                    break; // for문만 벗어남
                }

                if (num == 9) {
                    break outer; // for문, while문 모두 벗어남
                }

                switch (menu) {
                    case 1:
                        System.out.println("result = " + num * num);
                        break;

                    case 2:
                        System.out.println("result = " + Math.sqrt(num));
                        break;

                    case 3:
                        System.out.println("result = " + Math.log(num));
                        break;
                }
            }
        }
    }
}
profile
🐰 I'm Sunyeon-Jeong, mallang

0개의 댓글