Выражения, описывающие сложные условия

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

Для примера, рассмотрим, как с помощью подобных выражений проверять различные свойства чисел и их принадлежность к указанным промежуткам.

пример:

Составить выражение, отвечающее на вопрос «хранится ли в переменной z четное число?»

boolean t=z%2==0; \\ четное

Проверить, является ли значение в переменной s целым:

boolean t=s==(int)s;

Проверить, принадлежит ли переменная промежутку [-3,8.5)

boolean t=k>=-3 && k<8.5;

Проверить, является ли переменная m по модулю больше 5.

boolean t=n<-5 || n>5;

boolean t1=Math.abs(n)>5;

Проверить, принадлежит ли переменная v следующему промежутку: (-6;0) (0;6) {7}

boolean t=v>-6 && v<0 || v>0 && v<6||v==7;

boolean t1=v>-6 && v<6 && v!=0 ||v==7;

ПОРЯДОК ВЫПОЛНЕНИЯ ОПЕРАТОРОВ РАЗНЫХ ГРУПП

1. префиксные инкременты и декременты

2. действия в скобках

3. арифметические действия

4. операторы сравнения

5. логические операторы

6. присваивание

7. постфиксные инкременты и декременты

Ветвление в программах.

Ветвление – это ситуация в программе, при которой, в зависимости от некоторого логического условия, выполняются либо не выполняются предопределенные разработчиком действия.

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

if (условие) действие;

На месте условия может стоять любое выражение с логическим значением, а на месте действия может располагаться любая допустимая команда ЯП java, которая будет выполняться в том и только в том случае, когда условие истинно.

На месте действие вместо одной команды может содержаться целый набор команд. В таком случае их необходимо сгруппировать с помощью оператора блока

{ - открывает блок

} – закрывает блок

Выражения, состоящие из оператора блока, не требуется завершать «;», в отличие от всех остальных выражений.


Для наглядного форматирования кода принято внутренность любого кода смещать вправо на два пробела или tab(табуляция) относительно начала или конца блока.

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

пример:

int z=(int)(Math.random()*10);

if(z%2==0) System.out.print(“число четное”);

int z=(int)(Math.random()*10);

if(z%2==0) {

System.out.print(“создано число”+z);

System.out.print(“ и оно четное”);

}

К любому оператору if может быть добавлен необязательный блок else, действия внутри которого выполняются только в том случае, если условие у оператора if – ложно.

if (условие) {

\\ действие выполняется если условие истинно

} else {

\\ действие выполняется если условие ложно

}

пример:

int z=…;

if(z%2==0) {

System.out.print(“число четное”);

} else {

System.out.print(“число нечетное”);

}

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

пример:

int z=…;

if(z>0) {

System.out.print(“положительно”);

}

if(z==0) {

System.out.print(“нулевое”);

}

if(z<0) {

System.out.print(“отрицательно”);

}

В представленном примере в независимой переменной z всегда будут выполняться 3 условия (проверки). Это не рационально, потому что условия в данном случае являются взаимоисключающими: если число оказалось положительным, то оно одновременно не будет ни отрицательным ни нулем.


Число проверок можно сократить следующим образом:

int z=…;

if(z>=0) {

if(z==0) {

System.out.print(“нулевое”);

} else {

System.out.print(“положительно”);

} else {

System.out.print(“отрицательно”);

}

В представленном примере в лучшем случае будет 1 проверка, в худшем – 2.

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

В данном случае выполняется меньше проверок, если вероятней выпадение отрицательного числа на отрезке [2?;99].

Рассмотрим пример, когда с помощью условного оператора надо проверить совпадение конкретной переменной с некоторым набором значений.

Предположим, что нам нужно выполнять различные действия в зависимости от того будет ли переменная z равняться -1,0 или 1

if(z==-1) {…

} else {

if(z==0){…

} else {

if(z==1){…

}

Если бы потребовалась работать не с тремя, а с четырьмя значениями в наборе, то оптимальный код выглядел бы так:

if(z==-1) {…

} else {

if(z==0){…

} else {

if(z==1){…

} else {

}

}

Для более локаничной записи проверок подрядидущих взаимоисключающих условий принято использовать связку else if:

if(z==-1) {…

} else if(z==0){…

} else if(z==1){…

} else {…

}


Действия, которые будут помещены в последний блок else в данном случае будут выполняться не только для z==2, но и для любых других значений незатронутых вышестоящими условиями.

Если потребуется выполнить последний набор действий только для z==2, то последний блок нужно заменить на else if

-//-

}else if(z==2){…

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: