1. 객관식 연산자:switch

Java에는 할아버지(C++)에서 물려받은 또 다른 흥미로운 연산자가 있습니다. 우리는 진술에 대해 이야기하고 있습니다 switch. 다중 선택 연산자라고 부를 수도 있습니다. 조금 번거로워 보입니다.

switch(expression)
{
   case value1: code1;
   case value2: code2;
   case value3: code3;
}

표현식 또는 변수는 괄호 안에 표시됩니다. 표현식의 값이 이면 value1Java 시스템이 실행을 시작합니다 code1. 표현식이 와 같으면 value2실행이 로 이동합니다 code2. 표현식이 와 같으면 실행 value3됩니다 code3.

예:

암호 콘솔 출력
int temperature = 38;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
} 
High

2. break진술switch

명령문 의 중요한 기능 switch은 프로그램이 단순히 필요한 라인(필수 코드 블록)으로 이동한 다음 switch. 의 값에 해당하는 코드 블록뿐만 switch아니라 의 끝까지 모든 코드 블록이 switch.

예:

암호 콘솔 출력
int temperature = 36;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
} 
Low
Normal
High

36의 온도가 주어지면 프로그램은 명령문을 입력하고 switch첫 번째 코드 블록(첫 번째 경우)으로 이동하여 실행한 다음 나머지 코드 블록을 유쾌하게 실행합니다.

하나의 코드 블록 (일치하는 경우와 관련된 코드 블록) 만 실행하려면 break명령문으로 블록을 종료해야 합니다.

예:

암호 콘솔 출력
int temperature = 36;

switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
}
Low

해당 블록이 break 문이 있거나 없는 마지막 블록이므로 명령문 break의 마지막 경우에 the를 생략할 수 있습니다 .switch


3. 기본 조치:default

또 다른 중요한 점. switch괄호 안의 표현식과 일치 하는 사례가 없으면 어떻게 됩니까 ?

일치하는 케이스가 없으면 switch명령문의 나머지 부분을 건너뛰고 프로그램은 명령문을 끝내는 중괄호 다음에 실행을 계속합니다 switch.

즉, switch명령문이 명령문의 else 분기처럼 작동 하도록 할 수도 있습니다 if-else. 이렇게 하려면 default키워드를 사용하십시오.

case블록 의 s 중 어느 것도 switch표현식의 값과 일치하지 않고 에 블록이 switch있으면 default기본 블록이 실행됩니다. 예:

암호 콘솔 출력
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
Call an ambulance

4. 비교 switchif-else

switch은 문과 다소 비슷하지만 if-else더 복잡합니다.

문의 코드는 항상 switch여러 if문으로 다시 작성할 수 있습니다. 예:

스위치가 있는 코드 if-else를 사용한 코드
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
} 
int temperature = 40;

if (temperature == 36)
{
   System.out.println("Low");
}
else if (temperature == 37)
{
   System.out.println("Normal");
}
else if (temperature == 38)
{
   System.out.println("High");
}
else
{
   System.out.println("Call an ambulance");
}

왼쪽의 코드는 오른쪽의 코드와 정확히 동일하게 작동합니다.

명령문이 각각의 경우에 다양한 복합 표현식을 포함하는 경우 여러 명령문 체인이 if-else바람직합니다 .if



5. 문장에는 어떤 표현을 사용할 수 있나요 switch?

case모든 유형을 명령문 의 레이블 로 사용할 수 있는 것은 아닙니다 switch. 다음 유형의 리터럴을 사용할 수 있습니다.

  • 정수 유형: byte, short, int,long
  • char
  • String
  • 모든 enum유형

다른 유형은 케이스 레이블로 사용할 수 없습니다 .

enum내부 문을 사용하는 예 switch:

Day day = Day.MONDAY;
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
      break;
   case TUESDAY:
      System.out.println("Tuesday");
      break;
   case WEDNESDAY:
      System.out.println("Wednesday");
      break;
   case THURSDAY:
      System.out.println("Thursday");
      break;
   case FRIDAY:
      System.out.println("Friday");
      break;
   case SATURDAY:
      System.out.println("Saturday");
      break;
   case SUNDAY:
      System.out.println("Sunday");
      break;
}

enum참고: inside a 문을 사용하는 경우 레이블 switch의 각 값 앞에 클래스 이름을 쓸 필요가 없습니다 case. 그냥 값을 쓰는 것으로 충분합니다.