티스토리 뷰

1.    조건문 ( switch )

-      변수나 연산식의 값에 따라 실행문 선택할 때 사용

-      Switch(변수) { }

-      변수와 값이 같을 때 수행되는 실행문을 결정시킬 수 있다.

 

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

-      중괄호 { } 블록 내용을 반복적으로 실행할 때 사용한다.

-      종류 : for , while , do – while

-      1. For : 반복 횟수를 알고 있을 때 주로 사용한다.

-      For( 초기식; 조건식; 증감식 ) { 실행문 }

-      초기식은 int number = 10;에서 초기값을 생성하는 것과 비슷하게 식을 정의하는 것이다.

-      조건식은 if( )안에 있는 조건식과 비슷하게 참과 거짓을 판단하는 식이다.

-      참일 경우 중괄호 블록 { } 안에 있는 실행문을 반복해서 실행시키고, 거짓이 될 때 빠져나오게 된다.

-      순서 : 초기식 -> 조건식 -> 실행문 -> 증감식 -> 조건식 -> - - -

-      2. While : 조건식이 true일때동안 반복되게 된다.

-      While ( 조건식 ) { 실행문; }

-      for문과 while문은 모두 초기식, 조건식, 증감식이 있기에 서로 호환이 가능하다!

-      Do- while : 무조건 1번은 실행시키고 2번째부터 실행시킬지 말지 결정할 때 사용한다.

-      Do { 실행문; } while ( 조건식 );

-      Do-while문에서는 ( 조건식 )뒤에 꼭 ‘ ; ‘를 붙어야 한다.

-      3. Break : 반복문을 끝내기 위해서 사용하게 된다.

-      4. Continue : for문에서는 증감식으로, while문과 do-while문에서는 조건식으로 이동시킬 때 사용한다.

-      Ex) 홀수일때는 출력실행문으로 가기 전에 증감식으로 이동시켜버리고 짝수일때는 출력실행문으로 갈 수 있도록 해줄 때 사용한다.

 


01. Swith 문

 

public class Sample43 {

     

      public static void main (String[] args) {

           

            int num = (int)(Math.random()*6) +1;

           

            switch(num) {

           

            case 1: // num 값이 1이라면

                  System.out.println("1번이 나왔습니다.");

                  break; // 값이 일치하면 switch 끝내라!라는 의미이다.

            case 2:  // num 값이 2이라면

                  System.out.println("2번이 나왔습니다.");

                  break;

            case 3:  // num 값이 3이라면

                  System.out.println("3번이 나왔습니다.");

                  break;

            case 4:  // num 값이 4이라면

                  System.out.println("4번이 나왔습니다.");

                  break;

            case 5:  // num 값이 5이라면

                  System.out.println("5번이 나왔습니다.");

                  break;

                  default :  // num 값이 위의 값과 일치하지 않는다면 이것을 실행시켜라

                        System.out.println("6번이 나왔습니다.");

                  //    break; // default문에는 break를 사용하지 않는다. (**)

                  // default switch 가장 앞에 사용하게 되면, break문을 사용해야 한다.

                  // ----> break문을 사용하지 않으면 switch블록이 깨지지 않은채 다른 break문을 만날때까지 밑의 실행문이 사용될 있으므로

                  // ----> break문의 위치를 옮기고 싶을 때에는 break문을 사용하는 것이 오류를 줄일 있다.

                  // ----> 참고로 default문의 위치 자체를 옮기는 것은 가능하다.

           

            } //switch

            // default 대신 case 6: 라고 해도 괜찮다.

            // default 필수가 아니다.

            // case 1 뒤에는 :를 사용햐야 한다. (*****)

            // default 뒤에도 : 를 사용해야 한다. (****)

            // switch문은 break를 만날때까지 그냥 쭉 밀고 실행되어버리기 때문에 break;문을 꼭 써야한다!!(******)

           

      } // main

 

} // end class

 

02. Swith 문의 응용

 

public class Sample44 {

     

      public static void main(String[] args) {

           

            char grade = 'B'; // 66

            //switch문은 문자도 사용이 가능하다.

           

            switch (grade) {

           

            case 'A':

            case 'a':

                  System.out.println("우수회원입니다.");

                  break;

                 

            case 'B':

            case 'b':

                  System.out.println("일반회원입니다.");

                  break; // 대문자 B이든 소문자 b이든 실행시키는 것은 같기에 break;문을 각각 사용하기 보다는 같이 사용하였다.

                 

            default :

                  System.out.println("손님입니다.");

           

            }// switch

           

      } // main

 

} //end class

 

03. Swith 문이 가능한 타입

 

public class Sample45 {

     

      public static void main (String [] args) {

           

            String position = "과장";

           

            // switch문은 정수, 문자, 문자열 모두 사용이 가능하다.

            // 하지만 실수는 불가능! 하다!

           

            switch(position) {

            case "부장" :

                  System.out.println("700만원");

                  break;

                 

            case "과장" :

                  System.out.println("500만원"); // ----> 시행된다.

                  break;

                 

                  default :

                        System.out.println("300만원");

                       

            } // switch

           

      } // main

 

} // end class

 

04. Swith 문이 가능한 타입2 - 실수는 0.1로 인해 불가능하다.

 

public class Sample46 {

     

      public static void main (String[] args) {

           

            double number = 3.14;

           

            // switch문은 실수 시행이 불가능하다!

           

            // switch (number) { // <------ 컴파일 오류가 발생한다.

           

            // case 0.1:

                  // System.out.println("0.1");

                  // break;

                 

            // case 0.3:

                  // System.out.println("0.3");

                  // break;

                 

            // case 0.9:

                  // System.out.println("0.9");

                  // break;

                 

                  // default:

                        // System.out.println(number);

           

            // } // switch

           

      } // main

 

} //end class

 

05. Swith Expression 문

 

public class Sample47 {

     

      public static void main (String[] args) {

           

            // Java 12 : Switch Expression 새로 생겼다.

            // 1. 새로운 switch문은 간결하고 읽고 쉽습니다.

            // 2. 또한 break문에 대한 필요성을 제거합니다.

            // 3. 코드 실행은 첫번째 일치 이후에 이루어지지 않습니다.

            // 4. 다른 주목할만한 차이점은 switch문을 변수에 직접 할당할 있다는 것입니다.

            // 5. 값을 반환하지 않고 스위치 표현삭에서 코드를 실핼 수도 있습니다.

            // 6. 이전 구문과 새구문 중에서 선택해서 사용할 있습니다.

            // switch문과 switch expression 다른 것이다.

           

            int number = 7;

           

            switch(number) {

           

            case 7 -> { // switch Expression에서는 case : 에서 case ->로 변경이 되었다. (****)

                 

                  System.out.println("7");

                 

                  // break; 문이 없다는 것을 알 수 있다. (***)

                  // break; 자동으로 시행된다.

                  // {} 사용하면 단순히 값을 되돌려주는 것이 아니라 실행문을 실행시킬 있다.

                  // {} 중요하다!! (***)

                  // 값을 되돌려 줄때에는 case 1 -> 100;

                  // 실행문을 넣고 싶을 때에는 case 1 -> { } 으로 활용하는 것 같다.

                 

            } // case 7

           

            case 6 -> {

                 

                  System.out.println("6");

                 

            } // case 6

           

            } // switch

           

      } // main

 

} // end class

 

06. Swith Expression 문 - 2

 

public class Sample48 {

     

      public static void main(String[] args) {

           

            // JAVA : Switch Expression - 2

           

            int number = 1;

           

            int result = switch(number) {

           

            case 1 -> 100; // case 1 // <---- 값을 되돌려주는 switch

           

            case 2 -> 1+2+3; // case2

           

            case 3 -> number;

           

            // case 4 -> true; // 경우에는 블린 타입이기에 타입이 일치하지 않아 오류가 뜬다.

           

            // case 5 -> {          ;;    }  // <---- 오류 발생 : 복잡한 로직을 수행시키는 것은 불가능 하다.

            // switch 단순한 값을 되돌려 사용하는 것이다.

           

            default -> 0; // case3

           

            // 값을 생성하는 expression으로 사용할 때는 실행문과 달리 뒤어 " ; "을 붙어야 한다.

            // 타입을 일치하게 코드를 작성해야 한다.

            // switch expression에서는 이제 break;문이 자동으로 시행되기에 default 위치는 자유롭게 움직여도 괜찮다.

           

            }; // switch // int result 정의하는 중이기에 ; 붙어야 한다.

           

            System.out.println(result); // <----- number 1 해당되는 case1에서 100이라는 값을 되돌려주고 있기에

            // 100 출력되게 된다.

            // {} 절대 생략하지 말아라!!

           

      } // main

 

} // end class

 

07. For 문

 

public class Sample49 {

     

      public static void main (String[] args) {

           

            // 반복문 - for

            // 1+2+3+4+5+6+7+8+9+10 = ?

           

            // 1. 초기식 : 변수를 정의 ( 1번만 수행! )

            // 2. 조건식 : for block 반복수행할지, 말지를 결정

            // 3. 증감식 : 1에서 정의한 변수의 값을 변경

           

            int i; //(2) 그러나 int i main에서 선언함으로써 유효범위를 main으로 변경하게 되었다.

            //  i는 카운터 변수/ 루프제어변수라고 부르는데 (***)

            // i가 몇 번 반복할 지 정해주기 때문이다. (***)

           

            // 원래는 for ( int i = 1; i <=10; i++) { }였다.

            for ( i = 1; i<=10; i++) {

                  // 초기식은 정의를 위에서 미리 했을시에는 ( )내에서 생략이 가능하다. (**)

                  // 생략하더라도 ; 는 남겨둬야 한다. (***)

                  // 증감식도 어디에선가 기능만 한다면, ( ) 넣을 필요는 없다. 생략이 가능하다.

                  // 증감식을 { } 블록 내에 넣을 수도 있다.

                  // 조건식도 { } 블록 내에 넣음으로써 ( ) 내에서 생략이 가능하지만 ; 남겨둬야 한다.

                  // 3 모두 생략하게 시에는 JAVA에서는 무한루프로 결정해 버린다.

                  // 그렇기에 if -else break; 활용해야 한다.

                 

                  System.out.println(i);  // 참이면 i 출력해라!

                  // i 11 되어 거짓이 때에는 for문이 끝나버리게 된다.

                 

            } // for

           

            // (1) System.out.println(i);  <-- 컴파일 오류가 발생한다.

            // i 유효범위가 for 블록 내에서만 가능한 지역변수이기 때문이다.

            // i 유효범위가 main으로 변경되었기에

           

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

            // (3) for문이 끝난 후의 i 값을 알수 있다.

           

            // for ( ; ; ) { } 생략 버젼

            int i1 = 1;

            for ( ; ; ) { // 이렇게만 실행하면 무한루프로 되어버린다.

                 

                  if(i1<=10) { // 탈출조건이 필요하다!!

                        System.out.println(i1);

                  } else {

                       

                        // for문을 깨트려버려라!, for문을 끝내버려라!!

                       

                        break;

                       

                  }//if - else

                 

                  i1++;

            }

           

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

           

            // 이렇게 되면 코드가 꼬일 있으니, 그냥 for ( 초기식; 조건식; 증감식 ) {} 형태로 활용하는 것이 좋다.

           

      } // main

 

} // end class

 

08. For 문 - 실수타입(X)

 

public class Sample50 {

     

      public static void main (String[] args) {

           

            for( float x = 0.1f; x<=1.0f; x+=0.1f ) {

                  System.out.println(x);

                  // 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.70000005, 0.8000001, 0.9000001 출력

                  // Why? 0.1 경우에는 0.1 자체는 찍히지만 0.1 가지고 곱하거나 더하면 결과가 근사치로 출력이 되어 버린다.

                  // 그렇기에 for문에서는 "실수"를 카운터변수로 사용하지 않는다!!(***)

                  // float, double타입 모두 실수타입이기에 카운터변수로 사용하지 않는다!!!

                  // 즉, 정수를 카운터 변수의 값으로 사용해야 된다!!(***)

                 

            } // for

           

      } // main

 

} // end class

 

09. While 문

 

public class Sample51 {

     

      public static void main (String[] args) {

           

            int i = 1; // 카운터 변수 // (1) 초기식 : 카운터의 변수 정의

           

            while ( i <= 10 ) { // (2) 조건식 : 조건식 평가

                 

                  System.out.println(i);

                 

                  i++; // (3) 증감식

                 

            } // while

           

      } // main

 

} // end class

 

10. Swith 문 응용

 

public class Sample52 {

     

      public static void main (String[] ags) {

           

            int sum = 0;

            int i = 1;

           

            while (i<=100) {

                 

                  sum += i; // 복합대입연산자

                  // sum = sum + i

                 

                  i++;

                 

            } // while

           

            System.out.println("1~"+(i-1)+" : " + sum);

           

            // i-1 하는 이유는 i 값이 거짓으로 나올때는 101 될뿐만이 아니라 그때에는 sum 더해지지 않기 때문이다.

            // 그렇기 때문에 i-1 함으로써 참일때의 범위와 더해진 값을 구해주는 것이다.

           

      } // main

 

} // end class

 

11. Scanner

 

import java.util.Scanner;

 

// Source - Organize import 클릭하면 뜨게 된다.

 

public class Sample53 { // do - while ( Scanner ******)

     

      public static void main (String[] args) {

           

            System.out.println("메세지를 입력하세요.");

            System.out.println("프로그램을 종료하려면 q 입력하세요.");

           

            String inputString; // 변수의 목적 : 사용자의 입력 문자열을 저장하는 용도

           

            // 키보드로부터, 입력데이터를 받고자 할때, Scanner라는 것을 사용한다.

            // 콘솔창에서 입력할 있게 해준다.

           

            // 콘솔창에 입력하게 되면 아래의 내용이 출력되고 입력할 있다.

            // 프로그램을 종료하려면 q 입력하세요.

            // > 메세지1 // 내가 입력 + 엔터

            //  메세지1

            // > 안뇽 // 내가 입력 + 엔터

            //  안뇽

            // >q // 내가 입력 + 엔터

            // q

 

            // 프로그램 종료

           

            Scanner scanner = new Scanner(System.in); // 외워야 한다!! (********)

            // Scanner 객체명 = new Scanner(System.in); // 이것을 외워야 한다. (*******)

           

            do {

                  System.out.print(">"); // '>' 입력위치를 알려주는 기호 : 이를 'prompt'라고 한다.

                 

                  // 사용자가 입력한 문자열을 마치 스캐너가 스캐닝해서 이미지를 만들어 주듯이

                  // 문지열로 만들어 되돌려 주는 문장

                  inputString = scanner.nextLine(); // 변수의 초기화 // 외워야 한다!! (********)

                  // Scanner 사용자가 무엇을 입력하기 전까지는 대기상태로 만든다.

                  // enter 누르기 전까진 대기

                 

                  System.out.println(inputString); // 사용자가 입력한 문자열 출력

                 

            } while (!inputString.equals("q")); // 변수의 값이 문자열 'q'이면 true

            // 참이면 다시 실행하게 된다. ---> q 될때까지 계속 실행하게 된다.

           

            System.out.println();

            System.out.println("프로그램 종료");

           

      } // main

     

      // ""처럼 공백도 없는 문자열을 비어있는 문자열이라고 한다.

 

} // end class

 

12. While 문 응용 - if문

 

public class Sample54 { // break 예제

     

      // 무작위 정수를 생성했을 , 만일 6 나오면, 무한루프를 빠져나가는 예제

      // 무한루프(반복문) 빠져나가기 위해, break 사용!

     

      public static void main (String[] args) throws Exception {

           

            // 무한루프를 만들면, 반드시 "탈출조건" 생각해라!!

            while(true) { // 무한루프 : 조건이 (true) 넣었기에 항상 참이기 때문에, 무한으로 반복 수행

                  // for ( ; ; ) {} 무한루프이다.

                 

                  int num = (int)(Math.random()*6) +1; // 1~6 사이의 무작위 정수 생성

                  System.out.println(num);

                 

                  //탈출조건

                  if(num == 6) { // 만일, 무작위 정수가 6이라면....

                       

                        break; // while 반복문을 "깨트려라!" break -> 반복 종료!

                             

                   } //if

                 

            } // while

           

             System.out.println("프로그램 종료");

           

      } // main

 

} // end class

 

13. For 문 - 중첩사용

 

public class Sample55 {

     

      public static void main(String[] args) throws Exception{

           

            Outter: for (char upper = 'A'; upper <= 'Z' ; upper++) {

                 

                  for(char lower = 'a'; lower <= 'z' ; lower ++ ) {

                       

                        System.out.println( upper + "-" + lower);

                       

                        if(lower == 'g') {

                             

                              break Outter;

                              // break;만이라고 치면 밖에 있는 for까지 깨트릴 없기에 밖의 for Outter이라는 스티커를 붙임으로써

                              // 번에 깨트릴 있게 코딩한 것이다.

                              // 스티커(라벨) 이름은 마음대로 붙여도 괜찮다.

                             

                        } // if

                       

                  } // for for

                 

            } // for

           

            System.out.println("프로그램 실행종료!");

           

            // A-a

            // A-b

            // A-c

            // A-d

            // A-e

            // A-f

            // A-g

            // 프로그램 실행종료!

            // 이라고 출력된다.

           

      } // main

 

} // end class

 

14. For 문 - 구구단

 

public class Sample56 { // 구구단

     

      public static void main(String[] args) {

           

            int dansu = 2; // 구구단의 단수를 저장

           

            Outter : for( ; dansu <= 9 ; dansu++ ) { // 단수를 반복하는 반복문 ( 2-9단까지 )

                 

                  // System.out.println(dansu);

                 

                  System.out.println(dansu + "");

                 

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

                       

                        // System.out.println("\t"+i);   // "\t"를 치게 되면 tab키를 누른 것처럼 들여쓰기가 되어 나온다.

                       

                        System.out.println("\t" + dansu + "x" + i + "=" + (dansu*i));

                       

                        // 출력 결과는 아래처럼 나오게 된다. ( 3-9단은 생략함 )

                        // 2

                        // 2x1=2

                        // 2x2=4

                        // 2x3=6

                        // 2x4=8

                        // 2x5=10

                        // 2x6=12

                        // 2x7=14

                        // 2x8=16

                        // 2x9=18

                       

                        if ((dansu==9)&(i==7)) {

                             

                              break Outter; // Outter까지 끝내버려라!!

                              // (dansu*i)==63 가능하기는 하지만 9*7뿐만이 아니라 7*9또한 63 결과값이 나올 있으므로

                              // (dansu==9)&(i==7) 이라고 조건을 주거나 (dansu*i==63)&(dansu==9)라는 형식으로 특정지어줘야 한다.

                             

                        } // 9*7에서 끝내기 위한 if

                             

                  } // inner - for

                 

            } // outer - for

           

      } // main

 

} // end class

 

15. 과제 2 - 1

 

public class Sample57 { // 대면 - 2

     

      public static void main (String[] args) { // 과제 2 - v.1

           

            //1. 여러분이 길을 걸어가다가, 동굴에 빠졌습니다.

            //2. 동굴의 깊이는 100미터입니다.

            //3. 하루동안 열심히 올라가면 20미터를 올라갑니다.

            //4. 자는 동안에는 5미터를 다시 미끄러져 내려갑니다.

           

            // 과제 : 과연 동굴에서 빠져나오기 위해서는, 일이 걸릴까요?

           

            // 기준값 : 동굴 100미터, 하루동안 올라가는 20미터, 미끄러져 내려가는 5미터

            // 주의 : 몇일에 걸쳐 올라갔는데, 내가 동굴에서 빠져 나왔는지, 아닌지를 언제 판단해야 하느냐?

            // 주의2 : 만일 100미터 올라왔다고 합시다! 그러면, 이거리를 동굴을 빠져나왔다고 생각할 있느냐?        

            // 101미터 부터

           

            // 낮에 파악한다면 낮과 밤을 구분해야 하는건가..?

           

            final int climb = 20;

            final int slide = -5;

            final int cave = -100;

            int move = 0;

            int days = 0;

           

            while( ( cave + move ) <= 0 ) {  // 실행문

                 

                  move += climb;

                  days++;

                 

                  System.out.println("현재 올라온 거리 : "+move + "m"); // 낮에 올라간 후의 현재 거리 확인

                 

                  if(( cave + move ) <= 0 ) {

                        move += slide;

                        System.out.println("미끄러지고 후의 거리 : "+move + "m"); // 밤에 미끄러진 현재 거리 확인

                  } // if -

                             

                  System.out.println("날짜 : "+ days + ""); // 오늘의 날짜 확인

                 

             } // while - -

           

            System.out.println("탈출입니다!");

            System.out.println("동굴에서 빠져나오는데 걸린 날짜는 " + days + " 입니다."); // 몇일 걸렸는지 확인

           

      } // main

 

 

} // end class

 

16. 과제 2 - 2

 

public class Sample58 {

     

      public static void main (String[] args) {  // 과제 2 - v.2

           

            //1. 여러분이 길을 걸어가다가, 동굴에 빠졌습니다.

            //2. 동굴의 깊이는 100미터입니다.

            //3. 하루동안 열심히 올라가면 20미터를 올라갑니다.

            //4. 자는 동안에는 5미터를 다시 미끄러져 내려갑니다.

           

            // 과제 : 과연 동굴에서 빠져나오기 위해서는, 일이 걸릴까요?

           

            // 기준값 : 동굴 100미터, 하루동안 올라가는 20미터, 미끄러져 내려가는 5미터

            // 주의 : 몇일에 걸쳐 올라갔는데, 내가 동굴에서 빠져 나왔는지, 아닌지를 언제 판단해야 하느냐?

            // 주의2 : 만일 100미터 올라왔다고 합시다! 그러면, 이거리를 동굴을 빠져나왔다고 생각할 있느냐?        

            // 101미터 부터

           

            // 낮에 파악한다면 낮과 밤을 구분해야 하는건가..?

           

            int move = 0;

            int days = 0;

           

            while( move<=100 ) {

                 

                  move += 20;

                  days++;

                  System.out.println(days + "일차에 올라온 거리 : " + move + "m");

                  move -=5;

 

                 

            } // while

           

            System.out.println("탈출 : " + days + "");

           

      } // main

 

 

} // end class

 

728x90
댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항