АБОБА. Справочник по программированию на Java Методическое пособие
Скачать 242.41 Kb.
|
Управляющие операторыВ языках программирования управляющие операторы используются для реализации переходов и ветвлений в потоке выполнения команд программы в соответствии с ее состоянием. Управляющие операторы Java-программы можно разделить на следующие категории: операторы выбора, операторы цикла и операторы перехода. Операторы выбора позволяют программе выбирать различные ветви выполнения команд в соответствии с результатом выражения или состоянием переменной. Операторы цикла позволяют программе повторять выполнение одного или нескольких операторов (т.е. они образуют циклы). Операторы перехода обеспечивают возможность нелинейного выполнения программы. В этой главе мы рассмотрим все управляющие операторы Java. Операторы выбораВ Java поддерживаются два оператора выбора: if и switch. Эти операторы позволяют управлять порядком выполнения команд программы в соответствии с условиями, которые известны только во время выполнения. Оператор if – оператор условного выбора ветви Java-программы. Его можно использовать для направления выполнения программы по двум различным ветвям. Общая форма этого оператора выглядит следующим образом: if (условие) оператор1; else оператор2; Здесь каждый оператор – это одиночный оператор или составной оператор, заключенный в фигурные скобки (т.е. блок). Условие – это любое выражение, возвращающее значение типа boolean. Выражение else не обязательно. Оператор if работает следующим образом: если условие истинно, программа выполняет оператор1. В противном случае она выполняет оператор2 (если он существует). Ни в одной из ситуаций программа не будет выполнять оба оператора. Для управления оператором if можно применять и одиночную переменную типа boolean, как показано в следующем фрагменте кода: boolean dataAvailable; // ... if (dataAvailable) ProcessData(); else waitForMoreData(); Помните, что только один оператор может следовать непосредственно за ключевым словом if или else. Если нужно включить больше операторов, придется создать код, подобный приведенному в следующем фрагменте: int bytesAvailable; // ... if (bytesAvailable > 0) { ProcessData(); bytesAvailable -= n; } else waitForMoreData(); В этом примере оба оператора, помещенные внутрь блока, будут выполняться, если значение переменной bytesAvailable больше нуля. Некоторые программисты предпочитают использовать в операторе if фигурные скобки даже при наличии только одного оператора в каждом выражении. Это упрощает добавление операторов в дальнейшем и избавляет от беспокойства по поводу наличия фигурных скобок. Фактически пропуск определения блока в тех случаях, когда он необходим – достаточно распространенная ошибка. Например, рассмотрим следующий фрагмент кода: int bytesAvailable; // ... if (bytesAvailable > 0) { ProcessData(); bytesAvailable -= n; } else waitForMoreData(); bytesAvailable = n; Если судить по уровню отступа в коде, предполагалось, что операторbytesAvailable=n; должен выполняться внутри выражения else. Однако, как вы помните, в Java-программе пробелы значения не имеют, и компилятор никак не может “узнать” намерения программиста. Компиляция этого кода будет выполняться без вывода каких-либо предупреждающих сообщений, но при выполнении программа будет вести себя не так, как было задумано. В следующем фрагменте ошибка предыдущего примера исправлена: int bytesAvailable; // ... if (bytesAvailable > 0) { ProcessData(); bytesAvailable -= n; } else { waitForMoreData(); bytesAvailable = n; } Вложенные операторы ifВложенный оператор if – это оператор if, являющийся целью другого оператора if или else. В программах вложенные операторы if встречаются очень часто. При использовании вложенных операторов if важно помнить, что оператор else всегда связан с ближайшим оператором if, расположенным в одном с ним блоке и еще не связанным с другим оператором else. Например: if(i == 10) { if(j < 20) a = b; if(k > 100) c = d; // этот оператор if else a = c; // связан с этим оператором else } else a = d; // этот оператор else связан с оператором if(i == 10) Как видно из комментариев, последний оператор else связан не с оператором if(j<20), поскольку тот не находится в одном с ним блоке (несмотря на то, что он является ближайшим оператором if, который еще не связан с оператором else). Последний оператор else связан с оператором if(i==10). Внутренний оператор else связан с оператором if(k>100), поскольку тот является ближайшим внутри этого же блока. |