초록꼬마의 devlog
article thumbnail

2021.10.20(수)

🌱 반복문

  • while문
    • 예시들을 개념과 대비해서 잘 보자
    • 무작위(random) 수까지의 합 구하기
/* while문: 또 다른 종류의 반복문
 * 
 * 표현법
 * 초기식; // 필수는 아님
 * while(조건식) {
 *         (조건식이 true일 때) 반복적으로 실행할 코드; // a
 *         증감식; // 필수는 아님
 * }
 * 
 * 괄호 안의 조건식이 true일 경우 해당 구문(a)을 반복적으로 실행
 * while(true): 무조건 반복시킴 -> 무한반복
 */

public void method1() { // method1 영역 시작
    // i가 1~5일 때 인사하기: 구현 방법은 다수

    // 초기식
    // 제어변수 i, j, k

    // 방법1)
    System.out.println("[방법1]");
    int i = 0;

    while (/*조건식*/ i < 5) {
//            i++; // 문법에 틀린 건 아니지만, 논리적 오류; 증감식의 순서를 잘못 써서 "2~6번째 안녕" 출력 -> 맞는 사용 예는 방법2 참조
        System.out.println(++i + "번째 안녕하세요");
//            i++;
    }

    // 방법2)
    System.out.println("[방법2]");
    int k = 0;

    while (k < 5) {
        k++; 
        System.out.println(k + "번째 안녕하세요"); 
    }

    // 방법3)
    System.out.println("[방법3]");
    int l = 1;

    while (l <= 5) {
        System.out.println(l++ + "번째 안녕하세요"); // 후위연산자로 증감식 쓴 경우, 출력(처리)한 뒤 i값 1 증가시킴
    }


    // 방법4)
    System.out.println("[방법4]");
    int j = 1;

    while (j <= 5) {
        System.out.println(j + "번째 안녕하세요");
        j++;
    }

    int b = 10;
    while (b >= 6) {
        System.out.println(b + "(으)로 줄어든다...");
        b--;
    }

    int c = 1;
    while (c < 10) {
        System.out.println("다섯번만 나올거야~ (제어변수 c = " + c + ")");
        c += 2; // 증감식 c = c + 2-> c = 1 3 5 7 9 (11 되며 while문 탈출)
    }

} // method1 영역 끝

public void methodSum() { // methodSum 영역 시작
    int i = 1; // 초기식

    int sum = 0; // 합계를 계산해서 담아둘 변수

    while (i <= 100) { // i < 101
        sum += i;
        i++; // 증감식
    }

    System.out.println("1~100 사이의 자연수의 합 : " + sum);
} // methodSum 영역 끝

public void method2() { // method2 영역 시작
    // while문(만) 써서 1~100 사이의 짝수만 더하기

    int i = 1; // 초기식

    int sum = 0; // 합계를 계산해서 담아둘 변수

    while (i <= 100) { // i < 101
        // 짝수일 때만 더하기
        if (i % 2 == 0) {
            sum += i; // sum = sum + i;
        }
        i++; // 증감식
    }

    System.out.println("1~100 사이의 짝수의 합 : " + sum);

} // method2 영역 끝
  • do-while문
    • for문, while문만큼 예제를 많이 안 봐서 덜 익숙하니까, 복습 시 연습 더 하자!
/* do-while문
 * 별도의 조건 검사 없이 무조건 1회는 실행
 * 조건이 맞지 않더라도 1회는 실행
 * while(false) -> 1회는 실행
 * 
 * 표현법
 * do {
 *         System.out.println("한 번 해봐~");
 *         증감식; // 필수 아님
 * } while (조건식);
 * 
 * while과 do-while 차이점
 * while문은 처음 수행할 때도 조건식 검사 후 true여야 실행
 * vs do-while문은 첫 실행은 별도의 조건검사 없이 무조건 1번 실행(일단 해 봐)
 */

public void method1() {
    // 애초에 조건이 맞지 않아도 1번은 실행

    int num = 1; // 초기식

    do {
        System.out.println("무조건 한 번 해봐~"); // 일단 do 안의 내용 먼저 실행
    } while(num == 0); // 조건식 확인 결과 false인 바, 해당 do-while문 종료
                       // 조건식 확인 결과가 true이면, do 안의 내용 무한반복됨

}

🌱 분기문

  • break
/* break; ((반복문 또는 switch문) 멈춰) 
 * break문을 만나는 순간 '가장 가까운 반복문'을 빠져나감; 해당 break문이 속해있는 반복문 1겹만 빠져나감
 * 
 * 주의할 점: switch문 안의 break;와 다른 개념; switch문 안의 break는 해당 switch를 빠져나가는 용도일 뿐임
 * 
 * return은 메소드를 빠져나가는 것; 호출한 곳으로 돌아감
 */

public void method1() { // method1 영역 시작
    // 매번 반복적으로 새롭게 발생되는 랜덤값(1~100) "무한하게(for 또는 while)" 출력
    // 방법1) for( ; ; )
    // 방법2) while(true)

    // 그 랜덤값이 홀수일 경우(=조건 -> 조건문 사용) 반복문을 빠져나가게 할 것

    // 방법1)
    for ( ; ;) { // 랜덤값이 홀수일 때까지 무한 반복
        int random = (int)(Math.random() * 100) + 1; 
        // Math.random() = 0.00 ~ 0.99999
        // Math.random() * 100 = 0.00 ~ 99.9999
        // (int)(Math.random() * 100) = 0 ~ 99
        // (int)(Math.random() * 100) + 1 = 1 ~ 100

        if (random % 2 == 1) {
            System.out.println("프로그램을 종료합니다(random : " + random + ")");
            break; // 가장 가까운 반복문(여기서는 for문)을 빠져나감
        } else {
            System.out.println("random : " + random); // 결과물 수 = 홀수 random 값 나오기/if문 조건식 걸리기 전 for문이 돈 횟수
        }
    }

    // 방법2)
    while (true) {
        int random = (int)(Math.random() * 100) + 1;

        if (random % 2 == 1) {
            System.out.println("프로그램을 종료합니다(random : " + random + ")");
            break; // 가장 가까운 반복문(여기서는 while문)을 빠져나감
        } else {
            System.out.println("random : " + random); // 결과물 수 = 홀수 random 값 나오기/if문 조건식 걸리기 전 while문이 돈 횟수
        }
    }

} // method1 영역 끝
  • continue
/* continue : 반복문 안에서 쓰이는 구문; 분기문(탈출문), break의 친구
* continue를 만나면 그 뒤에 어떤 구문이 있든간에 실행하지 않고 pass -> 가장 가까운 반복문(증감식 부분)으로 돌아가라는 의미
*/

📗 소감

  • 반복문의 기본 구조, 분기문의 기본 정의 등 기본 개념을 잘 알아두자 + 개념을 꼼꼼히 적용해서 코드를 작성하자
  • 숙제는 쉽지 않지만, 단계별로 로직을 생각하고 코드로 작성해가는 것이 재미있다!

📗 homework: 제어문

  1. 연산자와 정수 2개를 입력받고, 입력된 연산자에 따라 알맞은 결과를 출력
  • 단, 해당 프로그램은 연산자 입력에 "exit"라는 값이 입력될 때까지 무한 반복하며, "exit"가 입력되면 "프로그램을 종료합니다" 출력하고 종료
  • 또한 연산자가 나누기이면서 두 번째 정수가 0으로 들어오면 "0으로 나눌 수 없습니다. 다시 입력해 주세요"를 출력 + 처음으로 돌아가 사용자가 다시 연산자부터 입력하도록 함
  • 없는 연산자가 들어올 때 "없는 연산자입니다. 다시 입력해주세요"를 출력 + 처음으로 돌아가 사용자가 다시 연산자부터 입력하도록 함
  1. 공차(숫자들 사이에서 일정한 숫자의 차가 존재하는 것) 만들기: 사용자로부터 시작 숫자와 공차를 입력받아 일정한 값으로 숫자가 커지거나 작아지는 프로그램 구현하기; 단, 출력되는 숫자는 총 10개