'Switch'에 해당되는 글 1건

  1. 2007.07.22 제어문 (1)

1. if 문
모든 제어문 중 가장 기초가 되는 제어문. 보통 3가지 형식이 있는데, 대부분이 거기서 거기인지라, 다만, 한가지 중요한 점은, 영어 if 가 갖는 의미에서 처럼, 만약 이라는 가정하에 벌어질수 있는 상황을 제어하는 문장이라는 것이다.

3가지 형식은, 1) if문만 쓰이는 경우, 2) if~else 가 사용되는 경우, 3) if~else if~else 가 사용되는 경우이다.

기본적으로 다, 똑같은 역할을 해줄 뿐 다를 것은 그다지 없다. 아래는 if 문의 간단한 소스
1//    import java.io.*;

2//    public class Exam06_01 {
3//        public static void main(String[] args) throws IOException {
4//           BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
5//           int su1 = 0, su2 = 0, su3 =0;

6//           System.out.print("첫번째 수를 입력하시오 : ");
7//           su1 = Integer.parseInt(in.readLine());

8//           System.out.print("두번째 수를 입력하시오 : ");
9//           su2 = Integer.parseInt(in.readLine());

10//           System.out.print("세번째 수를 입력하시오 : ");
11//           su3 = Integer.parseInt(in.readLine());

12//           if(su2 >= su1 && su2 >= su3) {
13//              int imsi = su1;
14//              su1 = su2;
15//              su2 = imsi;
16//            }
17//           else if(su3 >= su1 && su3 >= su2) {
18//              int imsi = su1;
19//              su1 = su3;
20//              su3 = imsi;
21//           }

22//           if(su3 > su2) {
23//              int imsi = su2;
24//              su2 = su3;
25//              su3 = imsi;
26//           }

27//             System.out.println(su1+ " >= " + su2 + " >= " + su3);
28//        }
29//    }

이 프로그램은 3가지 수를 받아서, 그 수를 큰수부터, 차례대로 나열하는 프로그램이다. if문의 간단한 예제인데, if 문의 조건에는 논리 조건문이 들어간다. 즉, true 나 false 라는 값이 들어가고, 그 조건을 만족하면, 해당 영역이 실행이 되고, 그렇지 않으면, 그 다음 영역이 실행되는 것이다.

여기서 중요한 부분은 5번째 라인의 변수를 초기화 시켜주는 부분인데, 초기화 시켜줄때, 위와 같은 방식은 괜찮으나, 다음과 같은 방식은 안된다.

int su1, su2, su3 = 0;

c 언어에서는 되었던 것 같은데;;; -0- 쿨럭


2. swich ~ case ~ break 문
switch 문, 역시 다 알테니... -0-, 이 제어문은 특정 수나 문자를 입력받아, 그에 해당되는 곳으로 이동, 해당되는 구문등을 실행시키도록 제어해주는 제어문이다. 수치나 문자에 따른 이동의 처리가, 아무래도 if문 보다는 빠르며, 컴파일 시에 위치가 정해진다.

다음은 switch 문의 예제이다.
1//    import java.io.*;

2//    class Exam06_02 {
3//           public static void main(String[] args) throws IOException [
4//           int city = 0;
5//           /*
6//           char city = 0;         // char 형태로 사용하고 싶을 경우, 사용
7//           */

8//           System.out.println("0 : Seoul");
9//           System.out.println("1 : InCheon, KyoungGi");
10//           System.out.println("2 : GangWon");
11//           System.out.println("3 : ChungBook");
12//           System.out.println("4 : DaeJeon, ChungNam");
13//           System.out.println("5 : JeonBook");
14//           System.out.println("6 : GwangJu, JeonNam");
15//           System.out.println("7 : DaeGu, KyoungBook");
16//           System.out.println("8 : PuSan, KyoungNam");
17//           System.out.println("9 : JeJu");

18//           System.out.print("Put the number above which you are from : ");
19//           city = System.in.read() - 48;
20//           /*
21//            city = (char)System.in.read();         // char 형태로 사용하고 싶을 경우 사용
22//           */

23//           switch(city) {
24//              case 0 : System.out.println("You are from Seoul"); break;
25//              case 1 : System.out.println("You are from InCheon, KyoungGi"); break;
26//              case 2 : System.out.println("KangWon"); break;
27//              case 3 : System.out.println("ChungBook"); break;
28//              case 4 : System.out.println("DaeJeon, ChungNam"); break;
29//              case 5 : System.out.println("JeonBook"); break;
30//              case 6 : System.out.println("GwangJu, JeonNam"); break;
31//              case 7 : System.out.println("DaeGu, KyoungBook"); break;
32//              case 8 : System.out.println("PuSan, KyoungNam"); break;
33//              case 9 : System.out.println("JeJu"); break;

34//              default : System.out.println("Who.....who are you?");
35//           }
36//        }
37//    }
18번째 줄에서 입력받은 값을, 19번째 줄에서, city 라는 변수안에 저장하고, 23번째 줄에 switch 문으로 넘겨서 입력받은 값을 판단한다.

입력받은 값이 0이면, 24번째 줄에, case 0으로, 넘어가, 프로그램이 실행되며, 입력받은 값이 5이면, case 5로 넘어가 프로그램이 실행된다. 하지만, case 몇번으로 넘어가든지, switch 문에서 프로그램은, 넘어간 곳에서부터 프로그램을 순차적으로 실행시키는데, 예를 들어, 위에서 4를 입력하면, case 4로 넘어가고, case4 에 해당되는 부분이 실행이 되고, 이후, 순차적으로, case 5, case 6, case 7 ... 등이 실행이 된다. 그렇게 되면, 자기가 원치 않는 부분까지도 실행이 되기 때문에 이를 막기 위해, break; 라는 문을 case 문 다음에 작성하여, 해당 case 구문이 실행된후 바로, 탈출할수 있도록 해준다.

break; 는 if 문을 제외하고, 가장 가까이 있는 블록하나를 탈출시키는 구문으로, 주로 loop 문에서 사용되며, 또한, switch 문에서, 해당 구문을 실행시키고 바로 빠져나오도록 할때 사용하기도 한다.

위에는 숫자 형태로 받아서 사용하는 방법으로, 19번째 줄에서 보듯이 숫자 형태로 받아 처리하기 위해 System.in.read()-48; 이라는 구문을 집어넣었다. 문자형태인, char 형으로 받아서 처리하기 위해서는, 4번째와 19번째 라인을 6번째 라인과 21번째 라인처럼 바꿔주고, 문자형이라는 것을 알려주기 위해서 case '0' 이라는 식으로 작은 따옴표 '' 를 붙여주어야 한다.

default 값은, 말그대로, 기본값으로, 만약, 입력받은 값이, case 문에 해당되지 않으면, 출력되어지는 부분이다.

아래는 또다른 예제이다.

1//    import java.io.*;

2//    class Exam06_03 {
3//        public static void main(String[] args) throws IOException {
4//           int id7 = 0, year = 0;
5//           String gen = "":
      
6//           System.out.print("Input the 7th number in your ID :");
7//           id7 = System.in.read() - 48;

8//           switch(id7) {
9//              case 9 : case 0 : year = 1800; break;
10//              case 1 : case 2 : year = 1900; break;
11//              case 3 : case 4 : year = 2000; break;

12//              default : year = -1;
13//           }

14//           switch(su % 2) {
15//              case 0 : gen = "Woman"; break;
16//              case 1 : gen = "Man";
17//           }

18//           if(year == -1) {
19//              System.out.println("When...were you born?")
20//           }
21//           else {
22//              System.out.println("You were born in " + year + "'s and a " + gen);
23//           }
24//        }
25//    }


8번째 라인 ~ 11번째 라인
: 가끔 case 문에 아무 구문도 없는 경우가 있는데, 바로 위와 같은 경우이다. 9번째 라인에서, 실질적으로 case 9 과 case 0의 구문이 동일하다. 그렇기에, 앞서 실행되는 case 9 의 구문을 없애주면, 9라는 숫자가 switch 문에 들어왔을때, case 9 를 실행하는데, 막상 case 9 에 해당되는 구문이 없으니까, 바로 case 0 으로 넘어가고, 거기서 year = 1800; 이라는 구문이 실행된다. 그후, break; 를 만나, switch 문을 탈출한다.

앞 서 설명했듯이, case 문으로 이동한 후에는, 해당 case 문 이후의 문장은 모두 실행에 버리는 switch 문의 특성상, 프로그래머가 언제, switch 문을 종료할것인지를 break; 를 사용하여, 적절히 조절해주어야 하겠다.

p.s 위의 글들은, 김승현 강사님열혈강의 Java Programming 의 Round 6-1, 2, 동영상 강좌에 기초한 내용입니다.
:

BLOG main image
아무거나 공부하자!!! by Young79

공지사항

카테고리

분류 전체보기 (79)
Programing (29)
English (31)
Graphic (4)
Saying on T"We"tter (15)

최근에 올라온 글

최근에 달린 댓글

글 보관함

달력

«   2024/05   »
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 31
Total :
Today : Yesterday :