4주차 과제 : 제어문(필수)

2020. 12. 12. 09:38
728x90

목표

자바가 제공하는 제어문을 학습하세요.

학습할 것 (필수)

선택문
반복문

 

 


 

 

 선택문(조건문) - if, switch 

 

 

 

if문

 

  • 가장 기본적인 조건문으로 조건식과 괄호{}로 이루어져 있다.
  • ' 만일(if) 조건식이 참(true)라면 괄호{} 안의 문장들을 수행하라 ' 는 의미.
  • 조건식의 결과는 true 또는 false 이어야 한다.

 

 

구조

if ( 조건식 ) {

    // 조건식이 참(true)일 때 수행될 문장들
    
}

 

 

 

 

//예제

int num = 80;

 if( num > 50 ){   // true
     System.out.println("num은 50보다 큽니다.");
 }

 if( num == 50){   // false 괄호안에 문장이 실행되지 않음.
     System.out.println("num은 50과 같다.");
 }

 if( num <= 80){   // true
     System.out.println("num은 80보다 작거나 같다.");
 }
 

 

 

// 결과

 

 

 

 

 

if-else문

 

  • if문에 else블럭이 더 추가된 것.
  • 조건식의 결과가 거짓일 때 else블럭의 문장을 수행하라는 뜻이다.
  • 조건식에 따라 두 개의 블럭 중 어느 한 블럭의 내용이 수행되고, 전체 if문을 벗어나게 된다.
  • 모두 수행되지 않는 경우는 있을 수 없다.

 

 

 

구조

if (조건식) {

    //조건식이 true일 때 수행될 문장
    
} else {
    
    //조건식이 false일 때 수행될 문장
    
}

 

 

 

 

//예제

       
       int num = 80;

        if( num > 50 ){  // true -> if블럭 실행
            System.out.println("num은 50보다 큽니다.");
        } else{
            System.out.println("num은 50보다 작다.");
        }

        if( num == 50){  // false -> else블럭 실행
            System.out.println("num은 50과 같다.");
        } else{
            System.out.println("num은 50과 같지 않다.");
        }

        if(num <= 80){  // true -> if블럭 실행
            System.out.println("num은 80보다 작거나 같다.");
        } else{
            System.out.println("num은 80보다 크다.");
        }
        

 

 

//결과

 

 

 

 

 

if-else if문

 

  • 수행해야할 경우의 수가 셋 이상인 경우에 사용.
  • 순서대로 평가해서 결과가 참인 조건식을 만나면, 해당 블럭만 수행하고 if-else if문을 벗어난다.
  • 결과가 참인 조건식이 없다면 else블럭의 문장들이 수행된다.

 

 

구조

if (조건식1) {

    // 조건식1의 결과가 true일 때 수행될 문장

} else if (조건식2) {

    // 조건식2의 결과가 true일 때 수행될 문장
    
} else if (조건식3) {

    // 조건식3의 결과가 true일 때 수행될 문장
    
} else {   // 생략 가능

    // 어느 조건식도 만족하지 못했을 때 수행될 문장 
    
}

 

 

 

 

//예제

        int num = 80;

        if( num > 50 ){  // 조건식 true -> 해당 블럭 실행
        
            System.out.println("num은 50보다 큽니다.");
            
        } else if ( num == 50){  // 조건식 false
        
            System.out.println("num은 50과 같다.");
            
        } else if( num <= 80){  // 조건식 true지만 위에서 조건식을 만족했기 때문에 이미 if-elseif문을 빠져나감.
        
            System.out.println("num은 80보다 작거나 같다.");
            
        } else{  // 조건식이 모두 false일 때 해당 블럭 실행
        
            System.out.println("조건식 모두 false");
            
        }

 

 

//결과

 

 

 

 

 

switch문

 

  • 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하여 가독성이 좋다.

 

 

실행 순서

  • 조건식을 계산
  • 조건식의 결과와 일치하는 case문으로 이동
  • 문장들을 수행
  • break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나감.
  • 조건식의 결과와 일치하는 case문이 없는 경우, default문으로 이동

 

 

 

switch문의 제약조건

  • 조건식 결과는 정수 또는 문자열이어야 한다.
  • case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.

 

 

 

구조

switch (조건식) {

    case 값1 :
          //조건식의 결과가 값1과 같을 때 수행될 문장
          
          break;
    case 값2 :
          //조건식의 결과가 값2와 같을 때 수행될 문장
          
          break;
    case 값3 :
          //조건식의 결과가 값3과 같을 때 수행될 문장
          
          break;
    default :
          //조건식의 결과와 일치하는 case문이 없을 때 수행될 문장
          
}

 

 

 

 

//예제

        
        System.out.println("가위(1), 바위(2), 보(3) 중 하나를 입력하세요 >>>");
        Scanner scan = new Scanner(System.in);
        
        int user = scan.nextInt();
        int com = (int)(Math.random()*3)+1;

        System.out.println(" user : " + user);
        System.out.println(" com : " + com);

        switch (user - com) {
            case 2:
                System.out.println("졌습니다.");
                break;

            case 1:
            case -2:
                System.out.println("이겼습니다.");
                break;

            case 0:
                System.out.println("비겼습니다.");
                break;

        }

 

 

 

 

 

 반복문 - for, while, do-while 

 

 

 

 

for문

 

  • 반복 횟수를 알고 있을 때 적합하다.
  • 구조가 복잡하지만 직관적이라 이해하기 쉽다.
  • 조건식이 참인 동안 블럭{} 내의 문장들은 반복한다.
  • 사용되는 변수가 적은 것이 더 효율적이고 간단하므로 불필요한 변수의 사용을 줄이는 것이 좋다.

 

 

구조

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

    // 조건식이 참일 때 수행될 문장
    
}

 

  • 초기화 : 반복문에 사용될 변수를 초기화하는 부분. 처음에 한번만 수행된다.
  • 조건식 : 값이 true이면 반복을 진행, false이면 반복을 중단한다. 
  • 증감식 : 반복문을 제어하는 변수의 값을 증감시키는 식. 반복될 때 마다 변수의 값이 증감식에 의해 변하다가 조건식이 false가 되어 for문을 벗어난다.

 

 

수행순서

  1. 초기화 수행
  2. 조건식이 참인 동안 '조건식 -> 수행될 문장 -> 증감식' 의 순서를 반복
  3. 조건식이 거짓이 되면, for문 전체를 빠져나간다.

 

 

 

//예제

        for(int i=0; i<5; i++){
        
            System.out.println("*****");
            
        }
        

 

 

//결과

 

 

 

 

중첩 for문

 

  • for문안에 다른 for문을 포함시키는 것이 가능하다.
  • 중첩의 횟수는 거의 제한이 없음.

 

 

//예제

        for(int i=0; i<5; i++){
            for(int j=0; j<5; j++){
                System.out.print("*");
            }
            System.out.println();
        }
        

 

 

//결과

 

 

 

 

 

 

향상된 for문

 

  • 타입은 배열 또는 컬렉션 요소의 타입과 같아야 한다.
  • 배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서 변수에 저장된다.
  • 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있다.

 

 

 

구조

for ( 타입 변수명 : 배열 또는 컬렉션 ) {

    // 반복할 문장
    
}

 

 

 

 

//for문

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

 

//향상된 for문

        int[] arr = {1, 2, 3, 4, 5};

        for ( int a : arr ){
            System.out.println(a);
        }
        

 

 

 

 

 

 

while문

 

  • 조건식이 false가 될때 까지 블럭{} 내의 문장을 반복한다.
  • 조건식을 평가하여 조건식이 false이면 while문을 벗어나고, true이면 블럭{}내의 문장을 수행하고, 다시 조건식으로 돌아간다.
  • 조건식이 false가 될때 까지 문장을 반복.
  • 조건식은 생략할 수 없고, 조건식이 항상 참이 되도록 하려면 반드시 true를 넣어야 한다.

 

 

 

구조

while (조건식) {

    // 조건식의 결과가 true인 동안 반복될 문장
    
}

 

 

 

for문과 while문 비교

 

  • for문은 초기화,조건식,증감식을 한 곳에 모아 놓은 것일뿐, while문과 다르지 않다.
  • for문과 while문은 서로 변환이 가능하다.
  • 초기화나 증감식이 필요하지 않은 경우라면, while문이 더 적합함.

 

 

//for문

//초기화, 조건식, 증감식
for (int i=1; i<=10; i++) {

    System.out.println(i);

}

 

 

//while문

int i = 1;  //초기화

while(i<=10) {  //조건식
 
    System.out.println(i);
    i++;    //증감식
    
}

 

 

 

 

 

do-while문

 

  • while문의 변형으로 기본적인 구조는 while문과 같으나 조건식과 블럭{}의 순서가 바뀐 것이다.
  • 블력{}을 먼저 수행한 후 조건식을 평가한다.
  • 블럭 내의 문장은 최소한 한번은 수행된다.

 

구조

do {

    //조건식의 결과가 true일 때, 수행될 문장
    
} while (조건식);

 

728x90

BELATED ARTICLES

more