JAVA언어

JAVA_#2_1

성-민 2023. 1. 19. 08:40

조건문과 반복문

 

플로우차트 = 순서도, 흐름도

플로우 차트
플로우차트 예시1

 

if

if (조건식) {

       조건식의 결과가 참일 때 실행하고자 하는 문장;

}

 

if -else

if (조건식) {

       조건식의 결과가 참일 때 실행하고자 하는 문장;

} else{

        조건식의 결과가 거짓일 때 실행하고자 하는 문장;

}

 

if - else if - else

if (조건식1) {

       조건식 1의 결과가 참일 때 실행하고자 하는 문장;

} else if (조건식2) {

        조건식2의 결과가 참일 때 실행하고자 하는 문장;

} else {

        조건식1, 2의 결과가 모두 거짓일 때 실행하고자 하는 문장;

}

*마지막 else 블럭은 생략이 가능합니다.

 

중첩 if

if (조건식1) {

       조건식 1의 결과가 참일 때 실행하고자 하는 문장;

       if (조건식2) {

               조건식1, 2의 결과가 모두 참일 때 실행하고자 하는 문장;

       } else {

               조건식1의 결과가 참이고, 조건식2의 결과가 거짓일 때 실행하고자 하는 문장;

       }

} else {

             조건식1의 결과가 거짓일 때 실행하고자 하는 문장;

}

 

블럭{}

조건식의 다양한 예

 

 

 

SWITCH

switch(조건식) {

       case 값1:

             조건식의 결과가 값1과 같을 경우 수행할 문장;

                    break;

       case 값2:

             조건식의 결과가 값2와 같을 경우 수행할 문장;

                    break;

       ....

 

       default:

             조건식의 결과와 일치하는 case 문이 없을 때 수행할 문장;

}
처리해야 하는 경우의 수가 많을 때 유용한 조건문입니다.
break; 를 작성해 주지 않으면 switch 문 끝까지 실행됩니다.
default 문은 생략 가능합니다.
if 조건문과 비교해보면 if 는 조건식 결과에 true/false 만 가능하고 switch 는 정수나 문자열 만 가능합니다.
실행 흐름 확인하기
       1. 조건식을 계산한다.
       2. 조건식의 결과와 일치하는 case 문으로 이동한다.
       3. 해당 case 문의 문장들을 수행한다.
       4. break; 를 만나거나 switch 문이 끝나면 switch 문 전체를 빠져나간다.

switch문의 제약조건

       1. switch 문의 조건식 결과는 정수 또는 문자열 이어야 합니다.
       2. case 문의 값은 정수 상수(문자 포함), 문자열 만 가능하며, 중복되지 않아야 한다.

 

*요일, 날짜에 활용

 

FOR

for (초기화; 조건식; 증감식) {

      조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;

}

실행 순서

1. 초기화

2. 조건식

3. 조건식이 참일 경우 문장 수행

4. 증감식

5. 조건식이 거짓이 될 때 까지 반복

 

예시

class For1_1 {
    public static void main(String[] args) {
        int i = 0;
        for (i = 0; i < 5; i++) {       // 1, 2, 3, 4, 5 ++ = 후위형으로 값이 참조된 후에 +1 for 문이 끝나면 i = 6
            System.out.println("for 문이 " + (i + 1) + "번째 반복 실행중입니다.");
        }
        System.out.println("for 문이 종료된 후 변수 i의 값은 " + i + "입니다.");
    }
}

++후위형 복습

 

중첩 FOR

for (초기화; 조건식1; 증감식) {

      조건식1의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;

      for (초기화; 조건식2; 증감식) {

                  조건식2의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;

      }      

}

예시_구구단

class For1_4 {
    public static void main(String[] args) {
        for (int i = 2; i < 10; i++) {
            System.out.println(i + "단 시작합니다.");
            for (int j = 1; j < 10; j++) {
                System.out.println("j는 현재 " + (j) + "입니다."); // (j)는 (1)인데 j++이라는 조건문이 붙어 있으므로 => J는 현재 2 입니다.
                System.out.println(i + "*" + j + "=" + (i * j));
            }
        }
    }
}

 

향산된 FOR

for (타입 변수이름 : 배열 or 컬렉션) {

      배열 or 컬렉션의 길이만큼 반복적으로 실행하고자 하는 문장;

}

예시

class For1_5 {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4, 5};

        for (int e : arr) {
            System.out.print(e + " ");
        }
    }
}

 

임의의 정수 만들기

Math.random() => 0.0과 1.0사이의 임의의 double 값을 반환합니다.

  1)  0.0 <= Math.random() < 1.0

 

1부터 5 사이의 random 한 정수 값 구하기

  1)  0.0 * 5 <= Math.random() * 5 < 1.0 * 5

  2)  (int)0.0 <= (int)(Math.random() * 5) < (int)5.0

  3)  0 + 1 <= (int)(Math.random() * 5) + 1 < 5 + 1

  4)  1 <= (int)(Math.random() * 5) + 1 < 6

class Control4_1 {
    public static void main(String[] args) {
        // 괄호 { } 안의 내용을 20번 반복
        // 1. 1 ~ 10 사이의 난수를 20개 출력하시오.
        // 1,2,3,4,5,6,7,8,9,10

        // 2. -5 ~ 5 사이의 난수를 20개 출력하시오.
        // -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
        for (int i = 0; i < 20; i++) {
            // 1번
//            System.out.println(Math.random() * 10); // 1. 0.0 * 10 <= x * 10 < 1.0 * 10
//            System.out.println((int)(Math.random() * 10)); // 2. 0 <= (int)(x * 10) < 10
//            System.out.println((int)(Math.random() * 10) + 1); // 3. 1 <= (int)(x * 10) + 1 < 11

            // 2번
//            System.out.println((int)(Math.random() * 11)); // 0 ~ 10
//            System.out.println((int)(Math.random() * 11) - 5); // -5 ~ 5
        }
    }

 

WHILE

while (조건식) {

            조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;

}

실행 순서

  1.  조건식

  2.  조건식이 참일 경우 문장 수행

  3.  조건식이 거짓이 될 때 까지 반복

class Control5_1 {
    public static void main(String[] args) {
        int i = 10; // while 반복 횟수 , 즉 for 문의 초기화

//        while (i-- != 0) {
//            System.out.println(i);
//        }

        // 위 코드와 같은 동작을 수행합니다.
        while (i != 0) {
            i--;
            System.out.println(i);
        }
    }
}
class Control5_2 {
    public static void main(String[] args) {
        int sum = 0;
        int i = 0;

        while (sum <= 100) {
            System.out.println("i = " + i);
            System.out.println("sum = " + sum);
            sum += ++i;
        }
    }
}

 

do = while

do {

       조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;

} while (조건식);

실행 순서

  1.  처음 한 번은 무조건 실행

  2.  조건식

  3.  조건식이 참일 경우 문장 수행

  4.  조건식이 거짓이 될 때 까지 반복

 

class Control5_3 {
    public static void main(String[] args) {
        int j = 1;

        do {
            System.out.println("do / while 문이 " + j + "번째 반복 실행중입니다.");
            j++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨.
        } while (j < 20); // while이 빠지면 오류가 생김.

        System.out.println("do / while 문이 종료된 후 변수 j의 값은 " + j + "입니다.");
    }
}

 

BREAK

자신이 포함된 하나의 반복문을 벗어납니다. (switch문에 사용했음.)

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

        while (true) {
            if(sum > 100)
                break;
            ++i;
            sum += i;
        }

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

 

CONTINUE (skip으로 이해)

자신이 포함된 반복문의 끝으로 이동

  - 그리고 다음 반복으로 넘어갑니다.

  - 전체 반복 중에서 특정 조건시 반복을 건너뛸 때 유용합니다.

class Control6_2 {
    public static void main(String[] args) {
        for (int i = 0; i <= 10; i++) {
            // 3의 배수는 건너뜀 : 3, 6, 9
            if (i % 3 == 0)
                continue;
            System.out.println("i = " + i);
        }
    }
}

 

이름붙은 반복문

반복문에 이름을 붙여서 하나 이상의 반복문을 벗어납니다.

class Control6_3 {
    public static void main(String[] args) {
        allLoop :
        for (int i = 2; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                if (i == 5) {
                    break allLoop;
                }
                System.out.println(i + " * " + j + " = " + (i * j));
            }
        }
    }
}
class Control6_4 {
    public static void main(String[] args) {
        int i = 2;
        allLoop :
        while (true) {
            for (int j = 1; j < 10; j++) {
                if (i == 5) {
                    break allLoop;
                }
                System.out.println(i + " * " + j + " = " + (i * j));
            }
            i++;
        }
    }
}

둘은 동일한 결과 값을 가져온다.