DEV/JAVA

조건문과 반복문

devvnn 2021. 12. 12. 15:04

01. if, else if, else

기본 문법

 

        // 조건문의 기본 구조
        if (조건 부분 1) {
            // 수행 부분 1
        } else if(조건 부분 2) {
            // 수행 부분 2
        } else if(조건 부분 3) {
            // 수행 부분 3
        } else {
            // 수행 부분 4
        }
 

 

  • 조건 부분 1이 true이면 수행 부분 1 실행, 수행 부분 2~4는 실행 X
  • 조건 부분 1이 false이면 수행 부분 1은 건너 뛰고 조건 부분 2를 확인, 조건 부분 2가 true이면 수행 부분 2가 수행되고 조건문이 끝남
  • 조건 부분 1 ~ 조건 부분 3 모두 false이면 수행 부분 4가 실행

 


예제 1

 

        // 예제 1
        int number = 13;
        if(number % 2 == 0) {
            System.out.println("even number");
        } else {
            System.out.println("odd number");
        }
        
        // 최종 결과값 : odd number
 

 


예제 2

 

        // 예제 2
        int x = 10;
        int y = 1;
        
        if(x != 10 || x% 2 != 0) {     // x가 10이 아니거나 x 나누기 2가 0이 아니면
            System.out.println(x);     // x를 출력
        } else if(y == 1) {            // y가 1이면
            System.out.println(y);     // y를 출력
        } else {                       // 다 아니면
            System.out.println(x + y); // x + y 출력
        }
        
        // 최종 결과값 : 1
 

실습
정수형 변수 a, b에 대하여 다음의 조건들을 만족하는 코드를 작성해 봅시다.
  1. a와 b가 같으면 "a와 b가 같습니다. a = b = [a의 값]"를 출력합니다.
  2. a와 b가 같지 않으면 "a와 b는 같지 않습니다"를 출력합니다.
  3. 조건 (2)의 출력문 이후에, a가 b보다 더 큰 경우 "a가 b보다 [a, b의 차]만큼 더 큽니다."를 출력합니다.
  4. 조건 (2)의 출력문 이후에, b가 a보다 더 큰 경우 "b가 a보다 [a, b의 차]만큼 더 큽니다."를 출력합니다.

 

public class Main {
    public static void main(String[] args) {
        int a = 38, b = 27;
        
        if(a == b){
            System.out.println("a와 b는 같습니다. a = b = " + a);
        }else{
            System.out.println("a와 b는 같지 않습니다.");
            if(a > b){
                System.out.println("a가 b보다 " + (a-b) + "만큼 더 큽니다");
            }else{
                System.out.println("b가 a보다 " + (b-a) + "만큼 더 큽니다");
            }
        }
        
        // 실행 결과
        // a와 b는 같지 않습니다.
        // a가 b보다 11만큼 더 큽니다.
    }
}
 

 


 

02. switch문

기본 문법

 

  • if문의 조건 부분은 불린 결과값을 내는 방식이었지만, switch문의 조건 부분은 숫자, 문자열 등의 결과값을 내는 식
  • 그 결과값에 따라 실행 되는 코드가 정해지는 것
  • 모든 switch문은 if문으로 변경 가능하지만, 반대는 불가
  • 합격-불합격, 옳다-그르다 등과 같은 방식으로 여러 개의 동등한 조건의 나열에는 switch문이 더 편리함
        // 기본 문법
        int i = 10;
        
        if( i % 3 == 0) { // i < 20 : 불린 식, 변수, 메소드 
            System.out.println("C 구역입니다.");
        } else if(i % 3 == 1) {
            System.out.println("A 구역입니다.");
        } else {
            System.out.println("B 구역입니다.");
        }
        
        switch(i % 3) { // i : 불린이 아닌 식, 변수, 메소드
            case 0:
                System.out.println("C 구역입니다.");
                break;
            case 1:
                System.out.println("A 구역입니다.");
                break;
            default:
                System.out.println("B 구역입니다.");
                break;
        }
 

 


예제 1

 

        // 예제 1
        /*
         * A+ : 100
         * A  : 90-99
         * B  : 80-89
         * C  : 70-79
         * D  : 60-69
         * F  : 0-59 
         */
        
        // 시험 점수 
        int score = 97;
        
        // 성적
        String grade;
        
        switch(score / 10) {
            case 10:
                grade = "A+";
                break;
            case 9:
                grade = "A";
                break;
            case 8:
                grade = "B";
                break;
            case 7:
                grade = "C";
                break;
            case 6:
                grade = "D";
                break;
            default:
                grade = "F";
                break;
        }
        System.out.println("성적 : " + grade); // 성적 : A
 

예제 2
break의 역할

 

        // 예제 2
        // switch의 조건 변수를 문자열 변수 grade로
        
        String grade = "F";
        
        switch (grade) {
            case "A+":
            case "A":
            case "B":
                System.out.println("참 잘했어요!");
                break;
            case "C":
            case "D":
                System.out.println("조금만 더 노력해 볼까요?");
                break;
            case "F":
                System.out.println("Fail입니다.");
            default:
                System.out.println("다시 수강해주세요.");
                break;
            
        }
        
        // 결과값
        // Fail입니다.
        // 다시 수강해 주세요.
 

 

  • grade가 "A" or "B"이면 "참 잘했어요."가 출력되고, "C" or "D"이면 "조금만 더 노력해 볼까요?" 출력
  • grade가 "F"면 "Fail 입니다."가 출력되고, break가 없으니 default로 넘어가서 "다시 수강해 주세요." 까지 출력

 


실습

정수 134354를 7로 나눈 나머지를 영어로 출력하세요.

예를 들어서 134354를 7로 나누었을 때 나머지가 0이면 콘솔에 "Zero"가 출력되어야 하고, 1 이면 콘솔에 "One"이 출력되어야 하고, 2이면 "Two"가 출력되어야 하고, 6이면 "Six"이 출력되어야 합니다. (어떤 수를 7로 나누었을 때, 나올 수 있는 나머지의 최솟값은 0이고, 최댓값은 6입니다.)

 

public class Main {
    public static void main(String[] args) {
        int number = 134354;
        switch(number % 7){
            case 0:
                System.out.println("Zero");
                break;
            case 1:
                System.out.println("One");
                break;
            case 2:
                System.out.println("Two");
                break;
            case 3:
                System.out.println("Three");
                break;
            case 4:
                System.out.println("Four");
                break;
            case 5:
                System.out.println("Five");
                break;
            default:
                System.out.println("Six");
                break;
        }
    }
}
 

 


 

03. while문

기본 문법

 

        // 기본 문법
        while(조건 부분) {
            수행 부분
        }
 

 

  • while문은 조건 부분이 true인 동안 계속 반복해서 수행부분을 실행하는 구문
  • 수행부분에서 조건이 false가 되도록 바꾸어주거나, break;를 통해서 반복문을 종료시킬 수 있음
  • while문은 반복 횟수를 정확히 알 수 없는 동작, 혹은 특별한 조건에서만 멈추어야할 경우 등에서 자주 사용
  • for문은 반복 횟수를 while문보다 직관적으로 조절할 수 있다는 점이 차이점

 


예제
1, 2, 3,...을 하나씩 더한 값이 10000보다 크거나 같아졌을 때, 마지막으로 더한 값은?

 

        int sum = 0;
        int i = 1;
        
        while(sum < 10000) {
            sum += i; // sum = sum + i;
            i++;
        }
        
        System.out.println(sum);   // 10011
        System.out.println(i - 1); // 141
 

 

  1. while문을 수행하기 전에 필요한 변수는 합을 기록할 "sum"과 1씩 증가시키며 더해야 할 "i"
  2. while문의 조건은 sum < 10000, sum이 10000보다 작을 동안 i를 1씩 증가시키는 과정을 반복해야하기 때문.
  3. 조건 부분을 통과하면 sum에 i를 더하고, i에 1을 더함
  4. 반복문이 끝나고 값들을 출력해보면 예상대로 sum은 10000보다 크거나 같고, 마지막에 더한 값을 알 수 있음

 

예제를 break 써서 풀기

 

        int sum = 0, i = 1;
        
        while(true) {
            if(sum >= 10000) {
                break;
            }
            
            sum += i;
            i++;
        }
        
        System.out.println(sum);   // 10011
        System.out.println(i - 1); // 141
 

 

  • while(true)를 써줬기 때문에 모든 경우에 반복문이 들어감, 대신 sum >= 10000가 true인 경우에 반복문은 끝남

 


실습
10000 미만의 정수 중에서, 153의 배수중 가장 큰 값을 찾아 출력하세요.

 

public class Main {
    public static void main(String[] args) {
        // 내가 쓴 답
        int num = 10000;
        int key = 153;
        int i = 1;
        int count = 0;

        while(num > (i*key)){
            count = i*key;
            i++;
        }
        
        System.out.println(count); // 9945
        
        
        // 정답
        int num = 10000;
        int key = 153;
        
        while(num % key > 0){
            num--;
        }
        
        System.out.println(num);
    }
}
 

 


 

03. for문

기본 문법

 

        // 기본 문법
        for(초기화식; 종결 제어식; 증감 제어식) {
            // 수행 부분
        }
 

 

  1. 초기화식(initailization)
  2. 종결 제어식(termination)
  3. 증감 제어식(increment)

예제
for문을 이용해서 1부터 10까지 출력하기

 

        for(int i = 1; i <= 10; i++) {
            System.out.println(i);
        }
        // 1
        // 2
	// 3
        // 4
        // 5
        // 6
        // 7
        // 8
        // 9
        // 10
 

 

  1. 초기화식에서 i라는 정수를 선언해주고 1을 지정   // int i = 1;
  2. i가 10보다 작거나 같을 동안 반복                             // i <= 10;
  3. 수행 부분이 끝나면 i를 1 늘려줌                               // i++

Q. for문은 언제 사용하나요?

for문은 while문과 달리 초기화식이 있고 for문 안에서만 쓸 수 있는 변수를 만들 수 있음

이러한 장점때문에 아래의 경우 등에 많이 사용

  1. 반복의 인덱스가 필요한 경우
  2. 반복의 최대 횟수가 정해진 경우
  3. 갯수가 정해진 데이터 셋(배열, 리스트 등)의 내용을 하나씩 봐야할 경우

※ 물론 while문으로 작성된 내용을 for문으로, for문으로 작성된 내용을 while문으로 작성할 수 있지만 더 자주 쓰이는, 더 직관적이고 편한 경우들이 있음


예제
1부터 100까지의 합을 구하시오

 

        int sum = 0;
        
        for(int i = 1; i<=100; i++) {
            sum += i; // sum = sum + i;
        }
        
        System.out.println(sum); // 5050
    }
 

 

  1. 반복문 밖에서 int 변수 sum을 만들어 주고 0으로 초기화 해줌(총합계를 저장하기 위해)
  2. 반복문 작성 - 내부에서만 사용할 변수 i를 초기화식에 써주고 i를 하나씩 늘려나가며 더하고 100까지만 더하기

실습
구구단 출력하기

 

public class Main {
    public static void main(String[] args) {
        for(int i = 1; i <= 9; i++){
            for(int j = 1; j <= 9; j++){
                System.out.println(i + " * " + j + " = " + (i*j));
            }
        }
    }
}
 
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
.
.
.

9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81