JAVA의 정석 4장 - 조건문과 반복문

김동환·2023년 12월 25일

JAVA의 정석

목록 보기
4/8
post-thumbnail

제 4장 - 조건문과 반복문


1. 조건문과 반복문

제어문 - 조건문, 반복문

프로그램의 흐름(flow)을 바꾸는 역할

조건문 if, Switch

if

if, if-else if, if-else, 중첩 if

Switch

단 하나의 조건식으로 많은 경우의 수를 처리가능
default 지정 가능
break; 잊지 말기

제약조건
1. swtich문의 조건식 결과는 정수 또는 문자열만 가능
2. case 문의 값은 정수, 상수만 가능(중복 불가)
(문자 리터럴 '1'. 문자열 리터럴 "YES" 가능)

Switch 기본 예제

public class Ex04 {
    //swtich문으로 현재 월을 입력받아, 3~5는 봄, 6~8은 여름, 9~11은 가을, 12~2는 겨울을 출력
    public static void main(String[] args) {
        //1. 스캐너로 현재 월을 입력받음.
        Scanner sc = new Scanner(System.in);
        int month = sc.nextInt();

        //2. switch문으로 작업 후 출력
        switch(month) {
            case 3: case 4: case 5:
                System.out.println("봄");
                break;
            case 6: case 7: case 8:
                System.out.println("여름");
                break;
            case 9: case 10: case 11:
                System.out.println("가을");
                break;
            default:
                System.out.println("겨울");
        }
    }
}

switch - 가위, 바위, 보 예제

public class Ex04 {
    public static void main(String[] args) {
        //컴퓨터와 가위바위보를 하는 게임
        //1(가위), 2(바위), 3(보) 중 하나를 입력받고,
        //컴퓨터는 1~3 중 임의의 수를 선택.
        //그림 또는 숫자로 무승부, 나의 승, 컴퓨터 승의 경우를 확인.
        //두 수를 빼서 0은 무승부, 1, -2, 나의 승, -1, 2는 컴퓨터 승을 출력

        //1. 1 ~ 3 정수를 입력
        Scanner sc = new Scanner(System.in);
        int myNum = sc.nextInt();

        //2. 컴퓨터 1 ~ 3 정수를 선택
        int comNum = (int)(Math.random()*3)+1;

        //3. 나, 컴퓨터의 숫자를 출력
        System.out.println("myNum = " + myNum);
        System.out.println("comNum = " + comNum);

        //4. 결과 계산 후 출력
        switch(myNum - comNum) {
            case 0:
                System.out.println("무승부");
                break;
            case 1: case -2:
                System.out.println("나의 승");
                break;
            default: //case -1: case 2:
                System.out.println("컴퓨터 승");
                break;
        }
    }
}

반복문

for, while, do-while

for 문

for(초기화; 조건식; 증감식) {
//조건식 true면 수행될 문장
}
public class Ex04 {
    public static void main(String[] args) {
        //초기값 2개, 증감식 2개
        //1.
        for (int i = 1, j = 10; i <= 10; i++, j--) {
            System.out.println(i+" "+j);
        }
        //2.
        for (int i = 1, j = 10; i <= 10; i++) {
            System.out.println(i+" "+(j-i+1));
        }
    }
}

중첩 for문

별 찍기 1

public class Ex04 {
    public static void main(String[] args) {
        //5x10 별찍기
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 10; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

별 찍기 2

public class Ex04 {
    public static void main(String[] args) {
        //num을 입력받아서, 위에서부터 1,2,3...9,num 별찍기
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        for (int i = 1; i <= num; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

구구단

public class Ex04 {
    public static void main(String[] args) {
        //구구단 출력
        for (int i = 2; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                System.out.println(i+" * "+j+" = "+ (i*j));
            }
        }
    }
}

향상된 for문

for(타입 변수명 : 배열 또는 컬렉션) {
//반복할 문장
}

while문

  • for문과 항상 서로 변환 가능.
  • 초기화, 증감식이 필요없으면 while문이 더 간결.
  • 조건식 생략 불가
while(조건식) {
//조건식 true인 동안, 반복될 문장
}

1부터 몇까지 더하면 누적합계가 100을 넘지 않는 제일 큰 수가 되는가?

public class Ex04 {
    public static void main(String[] args) {
        //1부터 몇까지 더하면 누적합계가 100을 넘지 않는 제일 큰수가 되는가?
        int i = 0;
        int sum = 0;

        while ((sum += ++i) <= 100) {

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

do-while문

{ } 블럭을 먼저 수행 후에 조건식을 평가.
최소한 한번은 { }블럭이 수행.
반복적으로 사용자의 입력을 받아서 처리할 때 유용.

do {
	//조건식이 참일 때 수행될 문장
} while(조건식);

369 게임 만들기

public class Ex04 {
    public static void main(String[] args) {
        //1~100까지 3,6,9게임 만들기
        //십의자리, 일의자리수에 3,6,9가 있는지 각각 비교
        for (int i = 1; i <= 100; i++) {
            System.out.printf("i=%d ", i);

            //i는 for문 제어에 사용되는 변수이기 때문에
            //tmp에 저장해서 처리.
            int tmp = i;

            do {
                //tmp%10(1의자리수)이 3의 배수인지 확인
                //tmp%10이 0이면 tmp%10%3은 무조건 0이 되므로,
                //tmp%10이 0인 것은 제외(10, 20, 30 ...)
                if (tmp % 10 % 3 == 0 && tmp % 10 != 0)
                    System.out.print("짝");
            } while((tmp/=10)!=0); //10의 자리가 0이 아니면 10의자리 수로 다시 반복
            System.out.println();
        }
    }
}

break문

  • switch문, 반복문에서 사용.
  • 자신이 포함된 가장 가까운 반복문을 벗어남.
  • 주로 if문과 함께 사용됨.
  • 전체 반복 중에 특정 조건을 만족하는 경우 반복문을 벗어나고자 할 때 유용.

countinue문

  • 반복문 내에서만 사용 가능.
  • 반복문 진행 중 continue문을 만나면,
  • 반복문의 끝으로 이동하여 다음 반복문으로 넘어감.
  • 그리고 다음 반복문을 계속 수행.
  • 주로 if와 함께 사용.
  • 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용.

이름 붙은 반복문

  • break문은 근접한 단 하나의 반복문만 벗어날 수 있음.
  • 때문에 여러 개의 반복문이 중첩된 경우는
  • 중첩 반복문 앞에 이름을 붙이고 break, continue문에 이름을 지정해서,
  • 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있음.

연습문제

① int형 변수 x가 10보다 크고 20보다 작을 때 true인 조건식
② char형 변수 ch가 공백이나 탭이 아닐 때 true인 조건식
③ char형 변수 ch가 ‘x' 또는 ’X'일 때 true인 조건식
④ char형 변수 ch가 숫자(‘0’~‘9’)일 때 true인 조건식
⑤ char형 변수 ch가 영문자(대문자 또는 소문자)일 때 true인 조건식
⑥ int형 변수 year가 400으로 나눠떨어지거나 또는 4로 나눠떨어지고 100으로 나눠떨어지지 않을 때 true인 조건식
⑦ boolean형 변수 powerOn가 false일 때 true인 조건식
⑧ 문자열 참조변수 str이 “yes”일 때 true인 조건식


[참고 문헌]
https://velog.io/@tone8943/%EC%9E%90%EB%B0%94%EC%9D%98%EC%A0%95%EC%84%9D-4%EC%9E%A5-%EC%A1%B0%EA%B1%B4%EB%AC%B8%EA%B3%BC-%EB%B0%98%EB%B3%B5%EB%AC%B8-%EC%9A%94%EC%95%BD
https://coderbear.tistory.com/43

profile
신입 백엔드 개발자입니다!

0개의 댓글