Помогите с заявлением о смене - PullRequest
6 голосов
/ 09 августа 2011

Я относительно новичок в Java.В операторе switch нужно ли ставить оператор break после каждого case?

Ответы [ 6 ]

7 голосов
/ 09 августа 2011

Нет, вам не нужно. Однако если вы пропустите оператор break, все остальные операторы внутри блока switch будут выполнены независимо от значения case, с которым они тестируются.

Иногда это может привести к нежелательным результатам, как в следующем коде:

switch (grade) {
    case 'A':
        System.out.println("You got an A!");
        //Notice the lack of a 'break' statement
    case 'B':
        System.out.println("You got a B!");
    case 'C':
        System.out.println("You got a C.");
    case 'D':
        System.out.println("You got a D.");
    default:
        System.out.println("You failed. :(");
}

Если вы установите переменную grade в 'A', это будет ваш результат:

You got an A!
You got a B.
You got a C.
You got a D.
You failed. :(
5 голосов
/ 09 августа 2011

Вам не нужно разбивать после каждого случая, но если вы этого не сделаете, они столкнутся друг с другом. Иногда вы хотите связать несколько дел вместе, пропуская разрывы.

3 голосов
/ 09 августа 2011

Вы делаете, если не выходите из оператора switch с return или другим действием.

3 голосов
/ 09 августа 2011

Это лучше, чем ты.В противном случае будут выполняться и следующие операторы.

switch(someNumber) {
case thisCaseMatches:
    doThat();
case thisCaseDoesNotMatch:
    shouldntExecuteYetItWillBeExecuted();
default:
    alsoWillbeExecuted();
}
2 голосов
/ 09 августа 2011

Хорошей практикой является ставить перерыв после каждого утверждения.

Вас не принуждают.

Но если вы не ставите tatement, у вас есть оператор каскадного переключения, а именно, может быть найдено больше условий, и иногда это может привести к логическим ошибкам.

Однако есть люди, которые думают, что каскадные операторы могут оптимизировать код, помогая писать меньше кода.

2 голосов
/ 09 августа 2011

Семантически, да.В противном случае все операторы case после первого совпадения будут выполняться.

...