[java] 각 경우에 값 범위와 함께 switch 문을 사용합니까?

Java에서 각 케이스에 둘 이상의 값이 포함 된 스위치 문을 작성할 수 있습니까? 예를 들어 (분명히 다음 코드는 작동하지 않습니다) :

switch (num) {
    case 1 .. 5:
        System.out.println("testing case 1 to 5");
        break;
    case 6 .. 10:
        System.out.println("testing case 6 to 10");
        break;
}

Objective C에서 이것이 가능하다고 생각하는데, Java에도 비슷한 것이 있습니까? 아니면 대신 if, else if문을 사용해야 합니까?



답변

Java에는 그런 종류의 것이 없습니다. 다음을 수행하지 않는 이유는 무엇입니까?

public static boolean isBetween(int x, int lower, int upper) {
  return lower <= x && x <= upper;
}

if (isBetween(num, 1, 5)) {
  System.out.println("testing case 1 to 5");
} else if (isBetween(num, 6, 10)) {
  System.out.println("testing case 6 to 10");
}


답변

switch명령문을 사용 하여 이러한 종류의 동작에 가장 가까운 것은

switch (num) {
case 1:
case 2:
case 3:
case 4:
case 5:
     System.out.println("1 through 5");
     break;
case 6:
case 7:
case 8:
case 9:
case 10:
     System.out.println("6 through 10");
     break;
}

사용 if진술.


답변

다른 대안은 다음과 같이 나누어 수학 연산을 사용하는 것입니다.

switch ((int) num/10) {
    case 1:
        System.out.println("10-19");
        break;
    case 2:
        System.out.println("20-29");
        break;
    case 3:
        System.out.println("30-39");
        break;
    case 4:
        System.out.println("40-49");
        break;
    default:
        break;
}

그러나 보시다시피 범위가 각 경우에 고정 된 경우에만 사용할 수 있습니다.


답변

Java에서는 그렇게 할 수 없다고 생각합니다. 가장 좋은 방법은 범위의 마지막 경우에 코드를 넣는 것입니다.

switch (num) {
  case 1: case 2: case 3: case 4: case 5:
     System.Out.Println("testing case 1 to 5");
     break;
  case 6: case 7: case 8: case 9: case 10:
     System.Out.Println("testing case 6 to 10");
     break;
  default:
     //
}


답변

  case 1: case 2: case 3: case 4: case 5:
         System.out.println("testing case 1 to 5");
         break;
  case 6: case 7: case 8: case 9: case 10:
         System.out.println("testing case 6 to 10");
         break;
  default:
         System.out.println("default"); 


답변

나는이 게시물이 오래되었다는 것을 알고 있지만이 답변은 인정받을 가치가 있다고 생각합니다. switch 문을 피할 필요가 없습니다. 이것은 Java에서 수행 할 수 있지만 case가 아닌 switch 문을 통해 수행 할 수 있습니다. 삼항 연산자를 사용합니다.

public class Solution {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = Integer.parseInt(sc.nextLine());

        switch ((1 <= num && num <= 5 ) ? 0 :
                (6 <= num && num <= 10) ? 1 : 2) {

            case 0:
                System.out.println("I'm between one and five inclusive.");
                break;
            case 1:
                System.out.println("I'm between 6 and 10 inclusive.");
                break;
            case 2:
                System.out.println("I'm not between one and five or 6 and 10 inclusive.");
                break;
        }
    }
}


답변

또는 의도 한대로 솔로 케이스를 사용하고 기본 케이스를 사용하여 범위 지침을 다음과 같이 지정할 수 있습니다.

switch(n) {
    case 1 : System.out.println("case 1"); break;
    case 4 : System.out.println("case 4"); break;
    case 99 : System.out.println("case 99"); break;
    default :
        if (n >= 10 && n <= 15)
            System.out.println("10-15 range");
        else if (n >= 100 && n <= 200)
            System.out.println("100-200 range");
        else
            System.out.println("Your default case");
        break;
}