Оператор if if — это оператор условного перехода. Он направляет выполнение программы по двум разным маршрутам. Общая форма оператора if: if (condition) {statemen1}; else {statement2}; где statementN — одиночный или составной (включенный в фигурные скоб ки, т. е. в блок) оператор маршрута N (N — номер маршрута, для if он ра вен 1 или 2); condition — любое выражение, которое возвращает значение типа boolean. Предложение else — необязательное. Оператор if работает так: если condition имеет значение true, то выполня ется statemen1, иначе — выполняется statement2 (если он присутствует). Оба оператора вместе не будут выполняться ни в коем случае. Например, рассмотрим следующий фрагмент: int а, b; ... if (а < b) а = 0; else b = 0; Здесь, если a меньше, чем b, то a устанавливается в нуль, иначе — b устанав ливается в нуль. Обе переменные сразу в нуль никогда не устанавливаются. Чаще всего для управления оператором if используется выражение, вклю чающее операции отношений. Однако в этом нет технической необходимо сти. Можно управлять оператором if, используя одиночную boolean пере менную, как показано в следующем кодовом фрагменте: boolean dataAvailable; ... if (dataAvailable) ProcessData () ; else waitForMoreData(); Помните, что только один оператор может появляться сразу после if или else. Если нужно включить в ветви большее количество операторов, то сле дует создать блок, как сделано, например, в следующем фрагменте: int bytesAvailable; ... if (bytesAvailable > 0) { ProcessData(); bytesAvailable -= n; }else waitForMoreData();
Здесь будут выполняться оба оператора в блоке if, если bytesAvailable больше нуля.
Некоторые программисты находят удобным включать фигурные скобки в каждую ветвь оператора if, даже когда там имеется только один оператор. Это облегчает последующее добавление других операторов в ветви 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) а = b; if(к > 100) с = d; // этот if else а = с; // связан с этим else } else а = d; // этот else относится к if(i == 10) Как указывают комментарии, заключительный else не связан с if (j < 20), потому что он не в одном с ним блоке (хотя это и самый близкий if без else). Последний else связан с if (i == 10). Внутренний else относится к if (k> 100), потому что это самый близкий if в пределах данного блока. Многозвенный if-else-if Общую программную конструкцию, которая основана на последовательно сти вложенных if, называют многозвенным (ladder) if-else-if. Эта конст рукция выглядит примерно так: if(condxtion1) statement1; else if (condxtion2) statement2; else if(condition3) statements3; . . . else statementsN; Операторы if выполняются сверху вниз. Как только одно из условий, управляющих оператором if, становится true, оператор, связанный с этим if, выполняется, а остальная часть многозвенной схемы пропускается. Если ни одно из условий не true, то будет выполнен последний оператор else. Заключительный else действует как условие по умолчанию: если все другие условные проверки не успешны, то выполняется последний оператор else. Если последний else отсутствует и все другие условия — false, то никакого действия выполняться не будет. Программа, использующая многозвенный if-else-if для определения вре мени года, в котором находится указанный (в переменной month) месяц: // Демонстрирует операторы if-else-if. package ifelse;
/** * * @author akarak */ public class IfElse {
/** * @param args the command line arguments */ public static void main(String[] args) { int month = 4; // Апрель String season; if (month == 12 || month == 1 || month == 2) { season = "Зима"; } else if (month == 3 || month == 4 || month == 5) { season = "Весна"; } else if (month == 6 || month == 7 || month == 8) { season = "Лето"; } else if (month == 9 || month == 10 || month == 11) { season = "Осень"; } else { season = "Непонятный месяц"; } System.out.println("Апрель это " + season + "."); } } Пример вывода этой программой: Апрель это Весна. Независимо от того, какое значение вы задаете для переменной month, в многозвенной схеме будет выполняться один и только один оператор при сваивания.
|