열심히 끝까지

Java1 day03 본문

Java1(주말)

Java1 day03

노유림 2022. 4. 16. 16:07

[3일차 수업 내용] 22.04.16

제어문 ( 조건문, 반복문 )

*정올(정보올림피아드) - 문제 - language coder  ==> 코딩문제

문제를 풀면서 기초가 다져졌는지 확인하는 것도 중요

============================================================================

* 지금까지 코드의 실행 흐름이 무조건 위에서 아래로 한 문장씩 순차적으로 진행

    -> 때로는 조건에 다라 문장을 건너뛰거나 같은 문장을 반복해서 수행해야 할 때가 있음

      ==> 프로그램의 흐름(flow)를 바꾸는 역할을 해야하는 문장을 제어문이라고 함

 

* 조건문은 조건에 다른 다른 문장이 수행되도록 하고, 반복문은 특정 문장들을 반복해서 수행

 

1. 조건문 if( if, if-else, if-else if- else), switch

          - 조건문은 조건식과 문장을 포함하는 블록{ }으로 구성

          - 연산결과데 따라 실행할 문장이 달라져 프로그램의 실행 흐름을 변경할 수 있음

          - 종류 : if문,  switch문  - 주로 if문 사용

 

          1-1 ) if문 

                  - 가장 기본적인 조건문

                  - 조건식과 괄호{ } 구성

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

                               }

                               ==> 만일 if 조건식이 참이면 괄호{ }안의 문장들을 수행

 

                               1. 조건식

                                         - 조건식 : 참과 거짓을 판명할 수 있는 식

                                         - if문에 사용되는 조건식은 일반적으로 비교연산자와 논리연산자로 구성

                                2. 블록 { }

                                         - 블록 : 괄호 { }를 이용해서 여러 문장을 하나의 단위로 묶을 수 있는 것

                                         - 블록은 { 시작 } 끝, 끝나는 괄호에 ;(세미콜론)을 붙히지 않음.

 

                if문 예시

                package example01;

                public class FlowEx01 {
                       public static void main(String[] args) {
                               int x = 0;

                               if( x == 0 ) {   // true

                                      System.out.println("x == 0");

                               }

                               if( x != 0 ) {    // false

                                      System.out.println("x != 0");

                               }

                               if( !( x == 0) ) {    // false

                                      System.out.println("!(x == 0)");

                               }

                               if( !( x != 0) ) {    // true

                                      System.out.println("!(x != 0)");

                               }

                        }

               }

 

 

          1-2 ) if-else

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

                    } else {
                             // 조건식이 거짓(false)일 때 수행될 문장들

                    }

 

                if-else문 예시 + *문자열 값 비교 및 문자열->정수 변환법*

                Package example01;

                import java.util.Scanner;

                public class FlowEx02 {
                         public static void main(String[] args) {

                                    Scanner sc = new Scanner(System.in);

                                     

                                    System.out.print("숫자를 하나 입력하세요 > ");

                                    String num = sc.nextLine();

                              

                                    System.out.println("입력받은 숫자 : " + num);

                                 

                                    // equals() : 문자열 값 비교를 위한 메소드(함수

                                    // "  " 포함하여 인식  ==> 10(x)   "10"(o)

                                    if ( num.equals("0")) {
                                          System.out.println("입력하신 숫자는 0입니다.");

                                    } else {

                                          System.out.println("입력하신 숫자는 0이 아닙니다.");

                                    }

 

                                    // Integer.parseInt() 로 "  " 제거하여 문자열이 아닌 정수로 표시

                                    // "10" ==> 10 그 정수를 변수 number에 포함

                                    int number = Integer.parseInt(num); // "  " <- 제거하여 정수로 남김

                                    if ( number == 0 ) {
                                          System.out.println("입력하신 숫자는 0입니다.");

                                    } else {

                                          System.out.println("입력하신 숫자는 0이 아닙니다.");

                                    }

 

                                    // 조건식에 그대로 Integer.parseInt()를 넣어 숫자로 비교

                                    if ( Integer.parseInt(num) == 0) {
                                          System.out.println("입력하신 숫자는 0입니다.");

                                    } else {

                                          System.out.println("입력하신 숫자는 0이 아닙니다.");

                                    }

                          }

                 }

 

 

          1-3 ) if-else if

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

                    } else if(조건식2) {

                               // 조건식1이 거짓(false)이고 조건식2가 참(true)일 때 수행될 문장들

                    } else if(조건식3) {

                               // 조건식1, 2가 거짓(false)이고 조건식3이 참(true)일 때 수행될 문장들

                    } else {

                               // 조건식1, 2, 3이 모두 거짓(false)일 때 수행될 문장들

                    }

 

                if-else if문 예시

                Package example01;

                import java.util.Scanner;

                public class FlowEx03 {
                         public static void main(String[] args) {

                                    int score = 0;

                                    char grade = '  ';

                                    Scanner sc = new Scanner(System.in);

                                     

                                    System.out.print("당신의 점수를 입력하세요 > ");

                                    score = sc.nextInt();

                             

                                    if ( score >= 90 ) {
                                          grade = 'A' ;

                                    } else if ( score >= 80 ) {  // score < 90 && score >= 80

                                                                      // ==> score < 90은 위에 if문으로 부터 내려옴

                                          grade = 'B' ;

                                    } else if ( score >= 70 ) {

                                          grade = 'C' ;

                                    } else {

                                          grade = 'D' ;

                                    }

                                    System.our.println("학점 : " + grade);

                          }

                 }

 

 

          1-4 ) 중첩 if문

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

                             if(조건식2) {
                                       // 조건식1, 2가 모두 참(true)일 때 수행될 문장들

                              } else {
                                       // 조건식1은 참(true)이고 조건식 2가 거짓(false)일 때 수행될 문장들

                              }

                    } else {
                             // 조건식1이 거짓(false)일 때 수행될 문장들

                    }

 

                중첩 if문 + if-else if 예시

                Package example01;

                import java.util.Scanner;

                public class FlowEx04 {
                         public static void main(String[] args) {

                                    int score = 0;

                                    char grade = '  ';

                                    char opt = '0';

 

                                    Scanner sc = new Scanner(System.in);

                                     

                                    System.out.print("점수를 입력하세요 > ");

                                    score = sc.nextInt();

                             

                                    if ( score >= 90 ) {
                                          grade = 'A' ;

                                          if (score >= 98) {
                                                     opt = '+';

                                           } else if (score < 94 ) {
                                                     opt = '-';

                                           }

                                    } else if ( score >= 80 ) { 

                                          grade = 'B' ;

                                          if (score >= 88) {
                                                     opt = '+';

                                           } else if (score < 84 ) {
                                                     opt = '-';

                                           }

                                    } else if ( score >= 70 ) {

                                          grade = 'C' ;

                                          if (score >= 78) {
                                                     opt = '+';

                                           } else if (score < 74 ) {
                                                     opt = '-';

                                           }

                                    } else {

                                          grade = 'D' ;

                                    }

                                    System.our.println("당신의 최종 학점 : " + grade + opt );

                          }

                 }

 

 

          1-5 ) switch

                     - if문은 조건식의 결과가 참과 거짓 두가지 밖에 없음

                     - 경우의 수가 많아질수록 else if를 계속 추가 -> 조건식이 많아져 복잡해짐

                        -> 여러 개의 조건식을 계산 ==> 처리시간이 증가 + 오래 걸림

                     - 이러한 if문과 달리 switch문은 단 하나의 표현식으로 많은 경우의 수를 처리 가능 + 표현도 간결

                         ==> 알아보기 쉬움

 

                    switch(표현식) {
                             case 값1 : 

                                        // 표현식의 결과가 값1과 같은 경우 수행될 문장들

                                        break; 

                             case 값2 :

                                        // 표현식의 결과가 값2과 같은 경우 수행될 문장들

                                        break; 

                             default :

                                        // 표현식의 결과가 일치하는 case문이 없을 때 수행될 문장들

                                        break; 

                    }

                              1. 표현식을 계산

                              2. 표현식의 결과와 일치하는 case문으로 이동

                              3. 이후의 문장들을 수행

                              4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나감. 

 

                switch 예시

                Package example01;

                import java.util.Scanner;

                public class FlowEx05 {
                         public static void main(String[] args) {

                                    Scanner sc = new Scanner(System.in);

                                    System.out.print("숫자 하나를 입력하세요 > ");

                                    int num = sc.nextInt();

                                    

                                    // switch + case + break;

                                   switch(num) {

                                             case 1 : 

                                                      System.out.println("입력하신 값은 1입니다.");

                                                      break;

                                             case 2 :

                                                      System.out.println("입력하신 값은 2입니다.");

                                                      break;

                                             case 3 :

                                                      System.out.println("입력하신 값은 3입니다.");

                                                      break;

                                             default :

                                                      System.out.println("입력하신 값은 1, 2, 3아 아닙니다.");

                                                      break;   // 제일 마지막에 있는 case 혹은 default는 break;가 필수가 아님

                                   }

                          }

                 }

 

                switch 예시 ( 위에 if - else if 문 예시를 switch로 바꾸어 표현)

                Package example01;

                import java.util.Scanner;

                public class FlowEx06 {
                         public static void main(String[] args) {

                                    int score = 0;

                                    char grade = '  ';

 

                                    Scanner sc = new Scanner(System.in);

 

                                    System.out.print("당신의 점수를 입력하세요 > ");

                                    score = sc.nextInt();

                                    

                                    switch(score / 10) {

                                             case 10 : 

                                             case 9 :

                                                      grade = 'A';

                                                      break;

                                             case 8 :

                                                      grade = 'B';

                                                      break;

                                             case 7 :

                                                      grade = 'C';

                                                      break;

                                             default :

                                                      grade = 'D';

                                   }

                                   System.out.println("학점 : " + grade);

                          }

                 }

 

 

2. 반복문 for, while, do-while

          - 어떤 작업이 반복적으로 수행되도록 할 때 사용

          - 종류 : for문, while문, do-while(while문의 변형)

          - for문이나 while문에 속한 문장은 조건에 따라 단 한번도 실행이 안 될 수 있음

             but!! do- while은 최소한 한번의 수행이 보장

 

          2-1 ) for문( for statement )

                     - for문은 반복 횟수를 알고 있을 때 적합

 

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

                                           // 반복수행할 문장

                             }

 

                             1. 초기식

                                         - 반복문에 사용될 변수를 초기화하는 부분

                                         - 처음에 단 한번만 수행

                             2. 조건식

                                         - 조건식의 값이 참이면 계속 반복, 거짓이면 반복 중단 -> for문 벗어남

                                         - 조건식이 잘못 작성되면 블록{  } 내의 문장이 한번도 수행되지 않거나

                                           영원히 반복되는 무한루프(infinite loop)에 빠지기 쉬움  ==> 주의 요망

                             3. 증감식

                                         - 반복문을 제어하는 변수의 값을 증가 또는 감소시키는 것

                                         - 매 반복마다 변수의 값이 증감식에 의해서 점진적으로 변하다가

                                           결국 조건식이 false가 되어 for문을 벗어남

 

                              // for문 구조 예시

                              for( int i = 0; i < 5; i++) {

                                       // 반복 횟수 : 5번 ( i == 0, 1, 2, 3, 4 )

                                       System.out.println(i);       // 0 1 2 3 4

                              }

                              for( int i = 13; i > 1; i--) {

 

                              }

 

                     // 지금 굳이 알 이유는 없음, 나중에 다른 Java 수업 진행 후 그 때 이해

                     * 향상된 for문 (enhanced for statement )

                              - 배열(Array)와 컬렉션(Collection)에 저장된 요소에 접근할 때, 기존보다 편리한 방법으로

                                처리할 수 있도록 for문의 새로운 문법이 있음  ==> 이를 향상된 for문이라고 함 

                          

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

                                           // 반복할 문장

                                }

 

                                - 위의 문장에서 타입은 배열 또는 컬렉션의 요소의 타입이여야 함

                                - 배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 얽혀서 변수에 저장

 

                for문 예시 

                Package example01;

                public class FlowEx07 {
                         public static void main(String[] args) {

                                   for( int i = 0; i <= 5; i++ ) {  // 반복 횟수 : 6번(0 1 2 3 4 5)

//                                            System.out.println("i : " + i); // 반복문 이후에도 변수가 필요하면                                                                                                           // for문 내가 아닌 다른 곳에 선언

                                   }

                                   System.out.println("i : " + i);

                                   System.out.println();

 

                                   int j;

                                   for( j = 0; j <= 5; j++ ) {  

                                              System.out.println("j : " + j); 

                                   }

                                   System.out.println("최종 j값 : " + j);

                          }

                 }

 

                for문 + 복합대입연산자를 이용하여 1~101까지의 누적합 구하기 예시                 

                Package example01;

                public class FlowEx08 {
                         public static void main(String[] args) {

                                   // for문과 복합대입연산자를 이용하여 1~101까지 누적합 구하기

                                   // ==> 5151

                                   int sum = 0;  // 복합대입연산자에서 초기화를 꼭 시켜줄 것

 

                                   for( int i = 1; i <= 101; i++ ) {  

                                              sum += i;     // sum = sum + i;

                                   }

                                   System.out.println("sum : " + sum);

                          }

                 }

 

                이중 for문 예시                

                Package example01;

                public class FlowEx09 {
                         public static void main(String[] args) {

                                   // 이중 for문 ==> 대표적으로 구구단

                                   for( int i = 2; i <= 9; i++ ) {  

                                              for( int j = 1; j <= 9; j++) {       

                                                            System.out.printf("%d x %d = %d\n", i, j, i*j);               

                                              }

                                   }

                                   System.out.println();

                          }

                 }

 

 

          2-2 ) while문        

                    - for문에 비해 while문의 구조는 간단, if문처럼 조건식과 블록만으로 구성

                    - while문은 조건식이 참(true)일 동안, 즉 조건식이 거짓이 될 때까지 블록 내의 문장을 반복

                    - 반복횟수가 정해져 있지 않을 때 사용하기 좋음

 

                    while(조건식) {

                               // 조건식이 참(true)일 때 반복 수행할 문장
                    }

                    

                    boolean flag = true;

                    while(flag) {

                              if(num == 0) {

                                        flag = false;  // if문이 없으면 무한루프, 무한루프를 빠져나가기 위한 탈출 조건
                              }
                    }

 

                while문 예시 - 꼭 다시 해볼 것

                Package example01;

                public class FlowEx10 {
                         public static void main(String[] args) {

                                   int i = 5;

                                   int j = 5;

 

                                   while( i-- != 0 ) {       // 내려오고 나중에 감소해서 0이 찍힘  

                                            System.out.println( i + " - 프로그래밍은 재밌다. ");

                                   }

                                  

                                   System.out.println();

 

                                   while( --j != 0 ) {       // 감소하고 내려와 0이 찍히지 않는다.

                                            System.out.println( j + " - 프로그래밍은 재밌다. ");

                                   }

                          }

                 }

 

                while문 예시(각 자리수의 합)

                Package example01;

                import java.util.Scanner;

                public class FlowEx11 {
                         public static void main(String[] args) {

                                   // 각 자리수의 합

                                   // Ex ) 12345 ==> 1 + 2 + 3 + 4 + 5  ==15

                                   // 나누기(/) 나머지(%) 이용

                                   int num = 0;

                                   int sum = 0;

 

                                   Scanner sc = new Scanner(System.in);

                                   System.out.print("숫자를 입력하세요(예 : 12345) > ");

                                   num = sc.nextInt();

 

                                   while( num != 0 ) {   

                                            sum += num % 10;   // sum = sum + (num % 10)   12345 % 10 == 5

                                            num /= 10;             // num = num / 10, 12345 / 10 == 1234

                                   }

                                   System.out.println("각 자리수의 합 : " + sum);

                          }

                 }

                

 

          2-3 ) do-while문       

                    do {

                                  // 조건식의 결과가 무조건 참일 때 수행될 문장들을 적음

                                  // 단, 한번은 무조건 실행

                    } while(조건식);

 

                    - do-while문은 while문의 변형으로 기본적인 구조는 while문과 같으나

                      조건식과 블록의 순서를 바꿔놓은 것

                    - 즉, 블록을 먼저 실행한 후에 조건식을 평가

 

          2-4 ) break, continue       

                    - break문은 자신이 포함된 가장 가까운 반복문을 벗어나며 주로 if문과 함께 사용되어

                      특정 조건을 만족하면 반복문을 벗어나도록  하게 하는 예약어

                    - continue는 반복문 내에서만 사용될 수 있으며 반복이 진행되는 도중에 continue문을 만나면

                      반복문의 끝으로 이동하여 다음 반복으로 넘어감

                      ==> for문의 경우 증감식으로, while문과 do-while문의 경우 조건식으로 넘어감

 

                    for( int i = 0; i <= 10; i++) { // 반복횟수 : 0 1 2 3 4 5 6 7 8 9 10 ==> 11번

                            System.out.println(i); // 0 1 2 3 4 5 6 7

                            if( i == 7 ) {

                                    break;           // 깨부순다.

                            }

                            System.out.println(i); // 0 1 2 3 4 5 6

                    }

 

                    for( int i = 0; i <= 10; i++){
                            System.out.println(i);   // 0 1 2 3 4 5 6 7 8 9 10
                            if( i == 3 ){
                                     continue;     // 뒤에 과정 무시한다.
                             }
                             System.out.println(i);    // 0 1 2 4 5 6 7 8 9 10
                             문장1
                             문장1
                             문장1
                             문장1
                             문장1
                             문장1
                    }

                    for( ){
                             for( ){
                                      if( ) {
                                              break; // 두번째 for문만 깨부순다.
                                      }
                             }
                    }

'Java1(주말)' 카테고리의 다른 글

Java1 day04  (0) 2022.04.17
Java1 day03 보충  (0) 2022.04.17
Java1 day02 보충 2  (0) 2022.04.16
Java1 day02 보충 1  (0) 2022.04.12
Java1 day02  (0) 2022.04.10