조건문과 반복문

홍예석·2023년 1월 19일
0

기초 학습

목록 보기
2/5

조건문

조건문에는 크게 if문과 swich문이 있다.

IF문

  • if문의 구조
    if (조건식 1) {
         조건식1 의 결과가 참일 때 실행하고자 하는 문장;
    } else if (조건식 2){
         조건식1 의 결과가 거짓이고, 조건식 2의 결과가 참일 때 실행하고자 하는 문장;
    } else {
         위의 모든 조건들의 결과가 거짓일 때 실행하고자 하는 문장;
    }
  • if문 예시
class Control1_4 {
    public static void main(String[] args) {
        int score = 87;

        if (score >= 90) {
            if(score >= 95){
                System.out.println("A++등급입니다.");
            }else {
                System.out.println("A등급입니다.");
            }
        } else if(score >= 80) {
            if(score >= 85){
                System.out.println("B++등급입니다.");
            }else {
                System.out.println("B등급입니다.");
            }
        } else if(score >= 70) {
            if(score >= 75){
                System.out.println("C++등급입니다.");
            }else {
                System.out.println("C등급입니다.");
            }
        }else {
            System.out.println("D등급입니다.");
        }
    }
}

Swith문

  • switch문의 구조
    switch(조건식){
          case value1:
                  조건식의 값이 value1일 때 실행할 문장;
                  break
          case value2:
                  조건식의 값이 value1일 때 실행할 문장;
                  break
          case value3:
                  조건식의 값이 value1일 때 실행할 문장;
                  break
          default:
                  조건식의 값과 앞의 모든 value들을 비교했을 때 한 번도 일치하지 않는 경우 실행할 문장

! 질문 : if문과 switch문의 차이가 뭔가요?

  • 답변 : if문의 실행 조건은 boolean, 즉 true인지 false인지에 따른 것이고, switch의 실행 조건은 값(정수 or 문자열)의 비교 결과입니다.

  • switch문 예시 : 숫자에 따라 month를 반환하는 switch문

class Control2_1 {
    public static void main(String[] args) {
        int month = 8;
        String monthString = "";
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            case 0: case 13:
                     System.out.println("이런식으로 case 문을 사용할 수 있습니다.");
                     break;
            case 15:
            default: monthString = "Invalid month";
        }
        System.out.println(monthString);
    }
}

반복문

반복문에는 대표적으로 for문과 while문이 있다.

For문

  • for문의 구조
    for (초기화; 조건식; 증감식) {
          조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
    }
    for문은 index가 변화하는 방식으로 반복이 이루어진다. 초기화식에서 index변수를 초기화하고, 조건식이 참일 경우, 블럭 안의 문장을 실행한다. 실행 이후 1회 이상 반복될 경우 조건식을 거짓으로 만들 수 있는 증감식을 실행하고, 다시 조건식으로 돌아간다. 이 때 조건식이 거짓으로 바뀌어 있으면 코드 블럭 안으로 들어가지 않고 반복을 종료한다.
  • for문 예시 : 구구단
class Control3_4_1 {
    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) + "입니다.");
                System.out.println(i + "*" + j + "=" + (i * j));
            }
        }
    }
}
  • 무한 반복
    초기화식, 조건식, 증감식이 항상 있어야 하는 것은 아니다. 3가지 식 중 한 가지 이상을 비워 무한 반복을 할 수 있다. 단 이 경우 index의 변화에 따른 반복문의 중단이 이루어지지 않기 때문에 코드 블럭 안에 특정 조건에 따른 break문을 이용해 반복문을 탈출할 수 있도록 하지 않으면 의미 그대로 정말 코드가 무한히 반복된다. 하지만 보통 이러한 유형의 무한 반복문은 후술할 while문에서 더 자주 활용된다. 아래 코드에서 if문을 제거하고 실행해 본 후, 강제로 중지하고 다시 if문을 넣어 실행해 보자
class Control3_4_2 {
    public static void main(String[] args) {
        for (int i = 0; ; i++) {
            System.out.println("현재 반복이" + i + " 회 진행중입니다.");
            if(i == 10){
            	break;
            }
        }
    }
}
  • 향상된 for문
    for문을 보통 배열 혹은 콜렉션과 함께 쓰는 경우가 많은데, 그 때마다 index와 배열 혹은 콜렉션의 원소를 일치시키는 과정이 번거로울 수 있다. 향상된 for문은 이를 단순화할 수 있다.
    for (타입 변수이름 : 배열 or 컬렉션) {
          배열 or 컬렉션의 길이만큼 반복적으로 실행하고자 하는 문장;
    }
  • 향상된 for문 예시
class Control3_5 {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4, 5};

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

위 예시에서는 int타입의 변수 e를 사용했지만, 만약 arr배열의 타입이 int[]가 아니라 char[]과 같이 다른 타입이었다면 e의 타입을 일치시켜주어야 한다.

! 질문 : 배열이 뭔가요?

  • 대답 : 마지막에 나옵니다.

While문

  • while문의 구조
    while (조건식) {
          조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
    }
    while문은 조건식이 참일 경우 코드 블럭을 계속 실행하는 방식으로 이루어진다. 따라서 조건식은 true 혹은 false를 리턴해야 한다.
  • while문 예시
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문의 구조
    do {
          조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
    } while (조건식);
    do-while문은 do 안의 문장을 한 번 먼저 실행한 이후 while문을 점검하여 반복을 결정한다. 첫 한 번이 반드시 실행된다는 것을 제외하고는 while문과 동일하다.
  • do-while문 예시
class Control5_3 {
    public static void main(String[] args) {
        int j = 1;

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

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

이름이 있는 반복문

앞서 for문과 while문을 중첩으로 사용했을 때, break 혹은 continue를 쓰면 해당 코드 블럭 하나만을 탈출하게 된다. 만약 둘 이상 중첩된 반복문을 한 번에 탈출하고 싶다면, 반복문에 이름을 붙여 한 번에 여러 반복문을 탈출할 수 있다.

  • 이름 있는 반복문 구조
    반복문 이름 :
    for (초기화; 조건식; 증감식) {
          조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
    }
  • 이름 있는 반복문 예시
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));
            }
        }
    }
}

배열

배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것이다.

  • 배열의 선언과 생성

방법 1 : 자료형[ ] 변수명 = new 자료형[배열의 길이];
방법 2 : 자료형[ ] 변수명 = new 자료형[ ] {value1, value2, value3 ...}
방법 3 : 자료형[ ] 변수명 = {value1, value2, value3 ...}

방법 2와 방법 3의 경우 값을 직접 집어넣는 방식이기 때문에 선언과 동시에 값이 고정된다. 하지만 값이 선언과 동시에 정해지는 것이 아니라 추후에 값이 대입되는 경우도 있기 때문에 방법 1과 같이 선언한 이후에 일련의 처리 과정을 거친 값들을 집어넣을 수도 있다.

  • 배열의 선언과 생성과 대입 예시
class Arrays1_1 {
    public static void main(String[] args) {
//        int[] age; // 참조변수 베열 age 생성
//        age = new int[5]; // 배열의 생성
        int[] age = new int[5]; // 선언과 생성 동시에
        age[3] = 28;
        System.out.println("age[3] = " + age[3]);

        int beatitudoAge = age[3];
        System.out.println("beatitudoAge = " + beatitudoAge);
    }
}

배열의 변수명을 출력해 보면, 해당 배열 전체가 출력되는 것이 아니라 배열이 저장된 주소가 출력된다. 배열에 접근하기 위해서는 배열의 몇 번째 원소에 접근할 지에 대한 index가 필요하다.

class Arrays1_1 {
    public static void main(String[] args) {
    int[] numberArray = new int[10];
    System.out.println(numberArray); // 배열의 주소가 출력됨
    System.out.println(numberArray[0]); // 배열의 0번째 원소가 출력됨
    System.out.println(numberArray[1]); // 배열의 1번째 원소가 출력됨
    						.
                            .
                            .
    System.out.println(numberArray[9]); // 배열의 10번째 원소가 출력됨
    }
}    

위에서 분명 배열의 크기를 10으로 지정했는데, 마지막 index가 9다. 이는 배열의 시작 index가 1이 아니라 0이기 때문이다. 배열의 크기가 10이라면 index는 0부터 9까지가 생성된다.

! 질문 : 배열 하나 하나를 확인하는 건 index를 통해 할 수 있는데, 배열 전체를 확인하는 건 그럼 어떻게 할 수 있나요?

  • 대답 : 배열 전체를 확인하는 방법은 대표적으로 2가지가 있습니다. 반복문을 통해 하나하나를 모두 출력해 보거나, Arrays의 메서드 toString을 이용하는 방법이 있습니다. Arrays.toString(배열);은 배열 전체를 String 형태로 반환해 주는 메서드입니다.

방법 1 : 반복문을 통해 하나하나 모두 출력

int[] numberArray = {1,2,3,4,5};
for (int i = 0; i < numberArray.length; i++){
	System.out.println(numberArray[i]);
}

방법 2 : Arrays.toString을 이용한 방법

int[] numberArray = {1,2,3,4,5};
System.out.println(Arrays.toString(numberArray));
profile
잘 읽어야 쓸 수 있고 잘 들어야 말할 수 있다

0개의 댓글