Having two `cases` in the same `switch` statement or branches in the same `if` structure with the same implementation is at best duplicate code, and at worst a coding error. If the same logic is truly needed for both instances, then they should be combined, for an `if` structure or one should fall through to the other for a `switch`.

## Noncompliant Code Example

    switch (i) {
      case 1:
        doSomething();
        break;
      case 2:
        doSomethingDifferent();
        break;
      case 3:  // Noncompliant; duplicates case 1's implementation
        doSomething();
        break;
      default:
        doTheRest();
    }

    if (a >= 0 && a < 10) {
      doTheThing();
    else if (a >= 10 && a < 20) {
      doTheOtherThing();
    }
    else if (a >= 20 && a < 50) {
      doTheThing();  // Noncompliant; duplicates first condition
    }
    else {
      doTheRest();
    }

## Compliant Solution

    switch (i) {
      case 1:
      case 3:
        doSomething();
        break;
      case 2:
        doSomethingDifferent();
        break;
      default:
        doTheRest();
    }

    if ((a >= 0 && a < 10) || (a >= 20 && a < 50)) {
      doTheThing();
    else if (a >= 10 && a < 20) {
      doTheOtherThing();
    }
    else {
      doTheRest();
    }

or

    switch (i) {
      case 1:
        doSomething();
        break;
      case 2:
        doSomethingDifferent();
        break;
      case 3:
        doThirdThing();
        break;
      default:
        doTheRest();
    }

    if (a >= 0 && a < 10) {
      doTheThing();
    else if (a >= 10 && a < 20) {
      doTheOtherThing();
    }
    else if (a >= 20 && a < 50) {
      doTheThirdThing();
    }
    else {
      doTheRest();
    }