|
|
|
помогите разобраться с switch case break
|
|||
|---|---|---|---|
|
#18+
Добрый день. Я вот никак не могу понять, почему в этом примере Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. выводятся все 5 строк. Понятно, что это такое поведение у оператора switch, он поочередно перебирает все case и как только находит совпадение, то выполняет соответствующий ему блок, а потом без проверки на совпадение выполняет все последующие блоки. Но зачем так делать? Это же нелогичное поведение оператора. Логичнее было бы ввести какую-то опцию, которая указывала бы switch'у, что текущую строку нужно тоже выполнить, даже если и нет соответствия в текущем case, чем принудительно указывать в каждом блоке break. Что-то типа такого Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Я понимаю, что никто ничего переделывать не будет и что просто нужно с таким поведением смириться, но может быть я чего-то не знаю? Почему такое поведение switch мне кажется абсолютно нелогичным, может есть какие-то ситуации, в которых это оправдано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2013, 12:11:52 |
|
||
|
помогите разобраться с switch case break
|
|||
|---|---|---|---|
|
#18+
jаva_student, yчи лучше Pascal и Delphi ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2013, 13:28:02 |
|
||
|
помогите разобраться с switch case break
|
|||
|---|---|---|---|
|
#18+
J.Serge, А по существу сказать нечего? Я не просил совета, что мне учить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2013, 13:38:44 |
|
||
|
помогите разобраться с switch case break
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2013, 13:38:53 |
|
||
|
помогите разобраться с switch case break
|
|||
|---|---|---|---|
|
#18+
JulT, The break statements are necessary because without them, statements in switch blocks fall through: All statements after the matching case label are executed in sequence, regardless of the expression of subsequent case labels, until a break statement is encountered. Вот именно это regardless и непонятно. Использование break выглядит костылем в данном случае. Не могу понять, чем было оправдано такое поведение, в каких случаях это может понадобиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2013, 13:46:42 |
|
||
|
помогите разобраться с switch case break
|
|||
|---|---|---|---|
|
#18+
java_studentВот именно это regardless и непонятно. Использование break выглядит костылем в данном случае. Не могу понять, чем было оправдано такое поведение, в каких случаях это может понадобиться. Синтаксис Java наследует синтаксис С++. Разбираться почему было сделано пару десятков лет назад достаточно бесполезно. В Java и без этого косяков масса. Если что-то сделано в Java так а не иначе, это не значит что данный варивнт является оптимальным для разработчиков. Возможно он был просто проще для разработчиков компилятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2013, 13:59:49 |
|
||
|
помогите разобраться с switch case break
|
|||
|---|---|---|---|
|
#18+
java_studentJ.Serge, A по существу сказать нечего? Я не просил совета, что мне учить. A чего ты хочешь услышать? switch в java работает именно так: нужен явный break. В Pascal и Delphi case работает иначе: там неявный break после окончания каждого блока кода по метке. Примерно так, как тебе хочется. Да, кстати, для второго примера, можешь првести ожидаемое поведение (вывод в System.out) для x = 1, x = 2, x = 3, x = 5 ну и x = 5? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2013, 14:01:13 |
|
||
|
помогите разобраться с switch case break
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2013, 14:01:44 |
|
||
|
помогите разобраться с switch case break
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Большое спасибо! Именно это и интересовало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2013, 14:24:03 |
|
||
|
помогите разобраться с switch case break
|
|||
|---|---|---|---|
|
#18+
J.SergeA чего ты хочешь услышать? switch в java работает именно так: нужен явный break. В Pascal и Delphi case работает иначе: там неявный break после окончания каждого блока кода по метке. Примерно так, как тебе хочется. Я хотел услышать вот это (еще раз спасибо Blazkowicz ). Теперь хоть понятно, почему такое поведение у switch. То, что мне казалось нелогичным, теперь имеет нормальное объяснение. Java унаследовала такое поведение от C, в котором switch был реализован как GOTO к нужной метке без обратного перехода к окончанию switch. Как-то так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Понятно, что при таком подходе нужно использовать break (который не даст выполняться следующим строкам кода). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2013, 14:38:03 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38291688&tid=2129197]: |
0ms |
get settings: |
16ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 270ms |
| total: | 404ms |

| 0 / 0 |
