한화시스템/백엔드

[BE] JAVA_반복문

jjam-mo 2024. 7. 13. 15:56

1. 반복문 개요

1-1. 반복문이란?

💡특정 코드를 반복하여 수행할 수 있도록 제어하는 명령문 

1-2. 반복문 종류

💡대표적인 반복문 3가지
1. for 문
2. while 문
3. do-while 문
/* 실행하기 위한 main 클래스 */

package com.ohgiraffers.section02.looping;

public class Application {
    public static void main(String[] args) {

        A_for aClass = new A_for();

        /* 설명. 단독 for문 흐름 확인용 메소드 호출 */
        aClass.testSimpleForStatement();
        aClass.testForExample1();
        aClass.testForExample2();

        B_nestedFor bClass = new B_nestedFor();
        bClass.printGugudanFromTwoToNine();
        bClass.printStars();
        bClass.printStars1();

        C_while cClass = new C_while();
        cClass.testSimpleWhileStatement();
        cClass.testWhileExample();

        D_doWhile dClass = new D_doWhile();
        dClass.testSimpleDoWhileStatement();
    }
}

 

2. for 문 개요

2-1. for 문 표현식

for(1-초기식; 2-조건식; 4-증감식) {
     3-조건을 만족하는 경우 수행할 구문(반복할 구문);
}
package com.ohgiraffers.section02.looping;

import java.util.Scanner;

public class A_for {

    /* 필기. 초기식을 갔다가 조건식을 간다. */
    public void testSimpleForStatement() {

//        동안(1부터; 10까지; 1씩증가) {
//            1부터 10까지 반복하며 출력
//        }

        for (int i = 1; i <= 10; i++) {     // 디버그 모드 시 엔터 눌러 구분해서 보면 좋다.
            System.out.println("i = " + i);
        }
    }

    public void testForExample1() {

        /* 설명. 변수들에 담긴 값들에 각각 2를 곱하고 1을 더하여 sum에 누적하기 */
        int num1 = 1;
        int num2 = 2;
        int num3 = 3;
        int num4 = 4;
        int num5 = 5;

        int sum = 0;

        sum += 2 * num1 + 1;
        sum += 2 * num2 + 1;
        sum += 2 * num3 + 1;
        sum += 2 * num4 + 1;
        sum += 2 * num5 + 1;

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

        /* 설명. for문을 통해 개선해 보자. */
        int forSum = 0;

        /* 설명. 초기값 0부터일 때 */
        for (int i = 0; i < 5; i++) {
            forSum += 2 * (i + 1) + 1;
        }

        /* 설명. 초기값 1부터일 때 */
        for (int i = 1; i <= 5; i++) {
            forSum += 2 * i + 1;
        }

        System.out.println("forSum = " + forSum);
    }

    public void testForExample2() {

        Scanner sc = new Scanner(System.in);
        System.out.print("limit 값 입력: ");
        int limit = sc.nextInt();   // limit은 전역변수, 클래스 안에서는 다 사용가능

        int sum = 0;

        for (int i = 2; i < limit; i += 2) {    // i는 지역변수, for문 안에서만 사용가능
            sum += i;
        }

        System.out.println("sum = " + sum);
    }
}
package com.ohgiraffers.section02.looping;

import java.util.Scanner;

public class B_nestedFor {
    public void printGugudanFromTwoToNine() {

        /* 설명.
         *  2단
         *   2 * 1 = 2
         *   2 * 2 = 4
         *   2 * 3 = 6
         *   ...
         *  3단
         *   3 * 1 = 3
         *   3 * 2 = 6
         *   3 * 3 = 9
         *   ...
         *  ...
         *   9 * 9 = 81
         *   */

        for (int i = 2; i < 10; i++) {          // 단(행, row)
            System.out.println(i + "단 곱셈");
            printGugudanOf(i);
            System.out.println();
        }
    }

    /* 설명. 단수를 넘겨주면 해당 단수의 곱셈 출력 기능 메소드 */
    private static void printGugudanOf(int dan) {
        for (int j = 1; j < 10; j++) {      // 수(열, column)
            System.out.println(dan + " * " + j + " = " + (dan * j));
        }
    }

    /* 설명.
     *  아래와 같은 별모양이 나오도록 작성해 보자.
     *  정수를 입력하시오: 5
     *  *
     *  **
     *  ***
     *  ****
     *  *****
     * */
    public void printStars() {
        Scanner sc = new Scanner(System.in);
        System.out.print("정수를 입력하시오: ");
        int input = sc.nextInt();
        for (int i = 0; i < input; i++) {
            placeStars(i);
            System.out.println();
        }
    }

    /* 설명. int 값을 주면 int 값의 수만큼 옆으로 *을 찍는 기능의 메소드 */
    private static void placeStars(int i) {
        for (int j = 0; j < (i + 1); j++) {
            System.out.print("*");
        }
    }

    /* 설명.
     *  정수를 입력하세요: 5
     *      *
     *     **
     *    ***
     *   ****
     *  *****
     * */
    public void printStars1() {
        Scanner sc = new Scanner(System.in);
        System.out.print("정수를 입력하세요: ");
        int input = sc.nextInt();
        for (int i = 0; i < input; i++) {

            placeSpace(input, i);

            placeStars(i);
            System.out.println();
        }
    }

    /* 설명. 두 가지 전달인자를 활용한 공백 출력 기능의 메소드 */
    private static void placeSpace(int input, int i) {
        for (int j = 0; j < input - (i + 1); j++) {
            System.out.print(" ");
        }
    }
}

3. while 문 개요

for문의 흐름과 동일

3-1. while 문 표현식

1-초기식;

while(2-조건식) {
		3-조건을 만족하는 경우 수행할 구문(반복할 구문);
		4-증감식;
}
package com.ohgiraffers.section02.looping;

import java.util.Scanner;

public class C_while {

    public void testSimpleWhileStatement() {
        int i = 1;
        while (i <= 10) {
            System.out.println("i = " + i);
            i++;
        }
    }

    public void testWhileExample() {
        Scanner sc = new Scanner(System.in);

        char answer = '\0';
        while (!(answer == 'Y' || answer == 'y')) {
            System.out.print("Y 또는 y 좀 눌러줄래?");
            answer = sc.next().charAt(0);
        }

        System.out.println("시키는 대로 눌러줘서 감사합니다.");
    }
}

4. do-while 문 개요

4-1. do-while 문 표현식

초기식;

do {
     1회차에는 무조건 실행하고, 이후에는 조건식을 확인하여 조건을 만족하는 경우 수행할 구문(반복할 구문);
     증감식;
} while(조건식);
package com.ohgiraffers.section02.looping;

import java.util.Scanner;

public class D_doWhile {

    public void testSimpleDoWhileStatement() {
        do {
            System.out.println("실행될까?");
        } while (false);        // do-while은 이 부분 ';' 찍는다.

        System.out.println("반복 종료 이후");
    }

    public void testDoWhileExample() {

        int sumPrice = 0;
        Scanner sc = new Scanner(System.in);
        int choice = 0;
        do {
            System.out.println("담을래 뺄래?");
            System.out.println("1. 담을래(+1000)");
            System.out.println("2. 뺄래(-1000)");
            System.out.println("3. 나갈래");
            System.out.print("번호를 고르시오: ");
            choice = sc.nextInt();
            if(choice == 1) {
                sumPrice += 1000;
            } else if(choice == 2) {
                sumPrice -= 1000;
            }
            System.out.println("현재 합계는: " + sumPrice);
        } while(choice < 3);

        System.out.println("휴~ 나왔다.");
    }
}