자바의정석 4장 조건문과 반복문 요약

서현우·2022년 6월 19일
0

자바의정석

목록 보기
16/22

4장 조건문과 반복문

제어문 - 조건문, 반복문

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

조건문 - if, switch

if

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

switch

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

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

switch 기본 예제

public class Ex6 {
    //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 Ex7 {
    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 Ex14 {
    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 Ex16 {
    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 Ex17 {
    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 Ex18 {
    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 Ex26 {
    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 Ex29 {
    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문과 함께 사용됨.
전체 반복 중에 특정 조건을 만족하는 경우 반복문을 벗어나고자 할 때 유용.

continue문

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

이름 붙은 반복문

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

profile
안녕하세요!!

0개의 댓글