Блок 1. Раздел 2. Тема 3

Оператор if.
«Если верно условие,
то сделай так»

Оператор if позволяет программе действовать по-разному в разных условиях - это основа всех программ без исключения. Если пользователь ввел одни данные, то действовать так-то, а если другие - то по-другому. Логические условия в if могут быть и более сложными, например, "если верно то и при этом не верно другое, тогда ..."
Оператор if устроен очень просто. Вы можете в программе сказать:
if ( x > 90 )  {                                      
 System.out.println (“Ura!”);                       
}                                                        
                                                          
// Если x > 90, то  начало  
//    Печатай «Ура!» 
// конец
// После if программа продолжится
Общий вид оператора:
if (УСЛОВИЕ) { КОД; }
То есть после if в круглых скобках идет какое-то логическое условие – если оно верно, то выполнится код в фигурных скобках после if, а если нет – то не выполнится. После этого программа в любом случае продолжит выполняться уже после if. Это очень удобный и могучий оператор, ведь теперь мы можем писать «если пользователь ввёл 1, то выполнить одно, а если ввел 2, то другое». То есть программа начинает как бы размышлять, что ей сделать. Она лишь выполняет оператор if, но кажется, что она сама решает, что ей делать.

Есть ещё расширенный вариант этого же оператора if-else:
if ( x > 90 )  { // Если x > 90, то  
       System.out.println ("Yes!"); // Печатай «Да!» 
} else {  // иначе  
       System.out.println ("Something else"); // Печатай «Другое!» 
} 
И еще один вариант "если верно, то одно, иначе если верно другое, то другое, во всех остальных случаях - третье":
if ( x > 90 )  {  // Если x > 90, то 
 System.out.println ("Yes!"); // Печатай «Да!» 
} else if (x < 50) { // иначе если x < 50, то 
 System.out.println ("No!"); // Печатай «Нет!» 
} else { // иначе  
 System.out.println ("Smth"); // Печатай «Другое!» 
} 
Общий вид оператора с дополнительной вставкой else-if:
if (УСЛОВИЕ) {
КОД ;
} else if (ДРУГОЕ УСЛОВИЕ) {
КОД ;
} else {
КОД ;
}
Можно использовать просто «если», то есть if. Можно в паре «если-иначе», то есть if-else, когда есть только одно условие в if и в противном случае выполнится код в else. Можно использовать самый широкий вариант и добавлять сколько угодно условий с помощью одного или нескольких операторов else if.

Сами условия могут быть разными, главные 4 такие:
Также можно использовать:
// Если после if идет всего одна строчка кода,
// то можно не брать её в фигурные скобки. 
// Она отделяется от else и от остального кода просто точкой с запятой. 
// Например так:

if (x == 5) 
 System.out.println ("Икс был равен 5"); 
else 
 System.out.println ("Икс не был равен 5"); 
Логические условия можно комбинировать с использованием «если одновременно верно И то, И другое, делай» - обозначается &&. А также если «ИЛИ верно одно, ИЛИ верно другое, хотя бы одно из них, то делай» - обозначается ||. Первый оператор && называется «логическое И», второй оператор || называется «логическое ИЛИ».
Определение. Выражение A && B равно правде (true), если одновременно A и B равны правде. Если хотя бы одно из условий равно лжи (false), то всё выражение равно лжи. Читается как «одновременно верно и условие A, и условие B». Поэтому его называют «логическое И».

Определение. Выражение A || B равно правде (true), если хотя бы одно из условий - A или B равно правде. Только если оба условия равны лжи (false), то всё выражение равно лжи. Читается как «верно хотя бы одно условие - А или B». Поэтому его называют «логическое ИЛИ».
Пример. Пишем два условия в одном:
if (x == 10 && y == 5) { … }  /* выполнить, если одновременно x равен 10 и при этом y равен 5 */ 

if (x == 10 || x == 20) { … }  /* выполнить, если  x равен 10 или 20 */ 
Пример. Разные варианты условий:
int x = myscan.nextInt ();

if (x > 30 && x < 50 && x != 5) {
 System.out.println ("Вы ввели число от 30 до 50, и при том не равное 5");
}
if (x < 10 || x > 40) {
 System.out.println ("Вы ввели число или меньшее 10, или большее 40");
}

double y = myscan.nextDouble ();
if (y == 5.5 || y == 10 || y == 8.3) {
 System.out.println ("Вы ввели или 5.5, или 10, или 8.3");
}

if (y == 5.5 && y == 10) {
 System.out.println ("Этот print никогда не вызовется");
 System.out.println ("Подумайте - почему так?");
}
Пример. В if можно сравнивать самые разные логические выражения:
double x = 10;
double y = 20;
// сравним квадраты этих чисел
if (x*x < y*y) 
 System.out.println ("Квадрат х меньше квадрата y");

// Сохраним значение логического выражения в переменную
 boolean res = x < y;
// Сохраненный результат равен true или false. Используем это:
if (res == true)
 System.out.println ("res = true, значит x меньше y");
Замечание. Результаты логических выражений можно хранить в переменных типа boolean. Например так:
int x = 3; 

boolean res1 = x < 5; // res1 будет хранить true 

boolean res2 = x > 100; // res2 будет хранить false 

boolean res3 = x < 5 || x > 100; // res3 сохранит true 

boolean res4 = x < 5 && x > 100; // res4 сохранит false 

 

// затем можно их использовать в IF 

if (res1 == true) 
 System.out.println ("res1 в самом деле true"); 

//их тоже можно комбинировать 
if (res1 == true || res2 == true) 
 System.out.println ("хотя бы один из res1, res2 равен true"); 
Самое главное мы уже освоили. Теперь время решать задачи. Ответьте на несколько вопросов, чтобы лучше усвоился новый материал:
Вопрос 1. Может ли быть так, что в операторе if-else не выполнится ни if, ни else?
Нет, в этой паре обязательно выполнится или блок кода в if, или else. Пример:
if (x>10)
System.out.println ("if worked");
else
System.out.println ("else worked");

Читаем - если x > 10, то одна печать, а иначе - другая. В блоке else нет своего условия, так как он срабатывает в любом противном случае, когда не выполнено условие If.

Вот два идущих подряд if или блок if-elseif уже не являются взаимоисключающими.
Вопрос 2. Можно ли в блоке кода одного if писать другой if?
Да, это обычная практика. Пример:
Scanner myscan = new Scanner (System.in);
int x = myscan.nextInt ();
if (x > 100) {
System.out.println ("x > 100 ");
if (x < 400) {
System.out.println ("and x < 400");
}
if (x != 500) {
System.out.println ("and x is not 500");
}
}

Просто команда "если верно условие, то делай код" вполне допускает, что в этом коде будет новое "если". Конечно, можно было бы сделать двойные условия с оператором И, но это не всегда бывает удобно.
Вопрос 3. Чем отличается условие x < 10 от x <= 10, то есть "строго меньше" от "меньше либо равно" ?
Условие x < 10 читается как "икс строго меньше десяти" и является верным только для иксов, меньших десяти, не включая саму десятку. То есть при x=10 это условие дает ложь. В то же время x <= 10 является правдой для иксов, меньших 10, а также для самой десятки. То есть "меньше либо равно", значит десятку тоже берём. Аналогична и разница между "строго больше >" и "больше либо равно >=" .
Задача 1. Может ли при каком либо x сработать else if (x>1000) в данном коде:
package javaapplication1;
import java.util.Scanner;
public class JavaApplication1 {
public static void main(String[] args) {

        Scanner myscan = new Scanner (System.in);
        
        int x = myscan.nextInt ();
        
        if (x>100)
            System.out.println ("x > 100");
        else if (x > 1000)
            System.out.println ("x > 1000");
        else
            System.out.println ("x <= 100");
 }   
}
Ответ
Нет, секция else if (x>1000) не сработает никогда ни одного раза.
Решение
Компилятор выполняет оператор if последовательно сверху вниз и выполнит только одну из секций во всем операторе. В начале написан if (x>100) - все что ниже выполнится только если x <= 100. Но ниже написан else if (x > 1000) - когда компилятор дойдет сюда, x уже всегда будет меньше либо равен сотни, тем более он никогда не окажется больше тысячи.
Решайте больше задач по этому разделу здесь.
В следующей теме создадим первые приложения, отвечающие на запросы пользователей