Условные конструкции – оператор if | Java

Мы пишем условие, код его проверяет и выводит результат в зависимости от того, было ли выполнено поставленное условие. В Java этим занимается оператор if. Рассмотрим его подробнее.

Программирование, которое вы сейчас делаете, — это последовательное программирование, то есть код выполняется сверху вниз. Это слишком линейно, так как каждая строка кода читается, начиная с первой строки, которую вы пишете, и заканчивая последней.

Но не всегда программы должны так работать. Часто требуется, чтобы код выполнялся только при соблюдении определенных условий. Например, вы можете захотеть, чтобы одно сообщение отображалось, если пользователь младше 18 лет, и другое, если ему 18 лет или больше. Мы хотим контролировать поток программы. И мы можем сделать это с помощью условных конструкций.

Условные конструкции в основном относятся к оператору if в Java: если пользователю меньше 18, тогда отобразить такое-то сообщение; если пользователь старше 18 лет, отобразить такое-то сообщение.

К счастью, в Java очень легко использовать условные конструкции. Давайте с оператора if и начнем.

Выполнение кода, когда должно происходить что-то одно, а не что-то другое, настолько распространено в программировании, что было разработано выражение if. Структура оператора if в Java такова:

if ( Условие ) {
        
}

Вы начинаете со слова if (оператор if пишется в нижнем регистре) и пары круглых скобок. Затем используете пару фигурных скобок, чтобы разделить кусок кода. Этот кусок кода является кодом, который вы хотите выполнить

, только если ваше условие выполнено. Само условие записывается в круглых скобках:

if(user < 18) {
            
}

Это условие говорит «ЕСЛИ пользователю меньше 18». Но вместо того, чтобы сказать «меньше», мы используем сокращенную запись левой угловой скобки (<). Если пользователю меньше 18, то мы хотим, чтобы что-то произошло, и отобразить сообщение, например:

if(user < 18) {
     //Выводим сообщение
}

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

Все, что вы вводите между фигурными скобками, будет выполнено только если условие выполнено, и это условие будет заключено в круглые скобки.

Прежде чем мы начнем практиковаться, есть еще одна сокращенная запись — это символ >. Правая угловая скобка означает «больше чем». В наше условие if, которое выше, можно внести небольшие изменения, чтобы проверить совершеннолетних пользователей:

if(user > 18) {
     //Выводим сообщение
}

Единственное, что нового в этом коде — это символ >. Теперь условие проверяет пользователей старше 18 лет.

Но оператор if не проверяет людей, которым ровно 18, только тех, кому больше. Если вы хотите проверить тех, кому 18 или больше, вы можете сказать «больше или равно» символами:

(>), за которым следует знак равенства (=):

if(user >= 18) {
     //Выводим сообщение
}

Также вы можете проверить «меньше или равно» аналогичным образом:

if(user <= 18) {
     //Выводим сообщение
}

Приведенный выше код содержит символ меньше (<), за которым следует знак равенства.

Давайте попробуем все это в простой программе.

Запустите новый проект, нажав File > New Project в строке меню в NetBeans. Вы можете называть свой пакет и имена классов как угодно. Введите следующий код (наше имя пакета conditionalconstructions, а класс называется OperatorIf):

Мы создали целочисленную переменную и присвоили ей значение 17. Оператор if в Java проверяет наличие «меньше 18». В таком случае сообщение в фигурных скобках должно быть распечатано.

Запустите свою программу и проверьте ее. (NetBeans имеет привычку запускать программу активного проекта в окне Projects, но не кода, который у вас отображен. Чтобы запустить код, щелкните правой кнопкой мыши в любом месте кода. В появившемся меню выберите

Run File или выделите ваш проект в окне Projects.) Вы должны увидеть это в окне вывода:

Теперь измените значение пользовательской переменной с 17 на 18. Запустите программу снова. Вы должны увидеть это:

Так что Java-программа работает нормально, без сообщений об ошибках. Просто ничего не распечатывается. Причина в том, что код с сообщением находится в фигурных скобках оператора if. И оператор if в Java-коде проверяет значения меньше 18. Если условие не выполнено, Java полностью игнорирует фигурные скобки и продолжает работу.

Упражнение 1

Замените символ «меньше» символами «меньше или равно». Измените сообщение так, чтобы оно подходило, например, «пользователь меньше или равен 18». Запустите программу. Вы видите сообщение?

Упражнение 2

Измените пользовательское значение на 20. Запустите программу. Вы все еще видите сообщение?

Вы можете указать более одного оператора if в Java-коде. Попробуйте следующий код:

На этот раз у нас есть два оператора if. Первый — тестирует значения меньше или равные 18. Второй — значения больше 18. Когда код запускается для user со значением 18 или меньше, вывод будет следующим:

Изменение значения переменной user на 20 дает это:

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

В следующем уроке мы продолжим условные конструкции.

Условия и циклы — Kotlin

Условное выражение if

В языке Kotlin if является выражением, т.е. оно возвращает значение. Это позволяет отказаться от тернарного оператора (условие ? условие истинно : условие ложно), потому что обычному if вполне по силам его заменить.

// обычное использование
var max = a
if (a < b) max = b
// с блоком else
var max: Int
if (a > b) {
    max = a
} else {
    max = b
}
// в виде выражения
val max = if (a > b) a else b

«Ветви» выражения if могут быть блоками, т.е. содержать несколько строк кода, при этом последнее выражение является значением блока:

val max = if (a > b) { print("возвращаем a") a } else { print("возвращаем b") b }

Если вы используете if в качестве выражения (например, возвращая его значение или присваивая его переменной), то использование ветки else является обязательным.

Условное выражение when

when определяет условное выражение с несколькими «ветвями». Оно похоже на оператор switch, присутствующий в C-подобных языках.

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // обратите внимание на блок
        print("x не равен ни 1, ни 2")
    }
}

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

when можно использовать и как выражение, и как оператор. При использовании его в виде выражения значение первой ветки, удовлетворяющей условию, становится значением всего выражения. При использовании в виде оператора значения отдельных веток отбрасываются. В точности как if: каждая ветвь может быть блоком и её значением является значение последнего выражения блока.

Значение ветки else вычисляется в том случае, когда ни одно из условий в других ветках не удовлетворено.

Если when используется как выражение, то ветка else является обязательной, за исключением случаев, в которых компилятор может убедиться, что ветки покрывают все возможные значения. Так происходит, например с записями класса enum и с подтипами sealed (изолированных) классов.

enum class Bit {
  ZERO, ONE
}
val numericValue = when (getRandomBit()) {
    Bit.ZERO -> 0
    Bit.ONE -> 1
    // 'else' не требуется, потому что все случаи учтены
}

В операторах when ветка

else является обязательной в следующих условиях:

  • when имеет объект типа Boolean, enum, sealed или их nullable-аналоги;
  • ветки when не охватывают все возможные случаи для этого объекта.
enum class Color {
    RED, GREEN, BLUE
}
when (getColor()) {
    Color.RED -> println("red")
    Color.GREEN -> println("green")
    Color. BLUE -> println("blue")
    // 'else' не требуется, потому что все случаи учтены
}
when (getColor()) {
    Color.RED -> println("red") // нет веток для GREEN и BLUE
    else -> println("not red") // 'else' обязателен
}

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

when (x) {
    0, 1 -> print("x == 0 or x == 1")
    else -> print("otherwise")
}

Помимо констант в ветках можно использовать произвольные выражения.

when (x) {
    s.toInt() -> print("s encodes x")
    else -> print("s does not encode x")
}

Также можно проверять вхождение аргумента в интервал in или !in или его наличие в коллекции:

when (x) {
    in 1..10 -> print("x is in the range")
    in validNumbers -> print("x is valid")
    !in 10..20 -> print("x is outside the range")
    else -> print("none of the above")
}

Помимо этого Kotlin позволяет с помощью is или !is проверить тип аргумента. Обратите внимание, что благодаря умным приведениям вы можете получить доступ к методам и свойствам типа без дополнительной проверки.

fun hasPrefix(x: Any) = when(x) {
    is String -> x.startsWith("prefix")
    else -> false
}

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

when {
    x.isOdd() -> print("x is odd")
    y.isEven() -> print("y is even")
    else -> print("x+y is odd")
}

Можно получать переменную внутри when условия по следующему синтаксису:

fun Request.getBody() =
    when (val response = executeRequest()) {
        is Success -> response.body
        is HttpError -> throw HttpException(response.status)
    }

Такая переменная, объявленная внутри условия when может быть видна только внутри тела этого when.

Цикл for

Цикл for обеспечивает перебор всех значений, поставляемых итератором. Он эквивалентен циклу foreach в таких языках, как C#.

for (item in collection) print(item)

Телом цикла может быть блок кода.

for (item: Int in ints) {
    // ...
}

Как отмечено выше, цикл for позволяет проходить по всем элементам объекта, имеющего итератор, например:

  • обладающего внутренней или внешней функцией iterator(), возвращаемый тип которой Iterator<>:
    • обладает внутренней или внешней функцией next()
    • обладает внутренней или внешней функцией hasNext(), возвращающей Boolean.

Все три указанные функции должны быть объявлены как operator.

Чтобы перебрать диапазон чисел, используйте выражение диапазона:

for (i in 1..3) {
    println(i)
}
for (i in 6 downTo 0 step 2) {
    println(i)
}

Цикл for по диапазону или массиву компилируется в основанный на индексе цикл, который не создает объект итератора.

Если при проходе по массиву или списку необходим порядковый номер элемента, используйте следующий подход:

for (i in array.indices) {
    println(array[i])
}

Также вы можете использовать библиотечную функцию withIndex.

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

Цикл while

Тело циклов while и do-while выполняется до тех пор, пока их условие выполняется. Разница между ними заключается во времени проверки условия:

  • while проверяет условие и, если оно истинно, выполняет тело, а затем возвращается к проверке условия;
  • do-while выполняет тело и только затем проверяет условие. Если оно выполняется, цикл повторяется. Таким образом, тело do-while выполняется по крайней мере один раз независимо от условия.
while (x > 0) {
    x--
}
do {
    val y = retrieveData()
} while (y != null) // y здесь доступно!

Break и continue в циклах

Kotlin поддерживает привычные операторы break и continue в циклах. См. Операторы перехода.

Java для полных новичков — операторы if

Домашнее обучение: курс программирования на Java


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

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

Условная логика в основном относится к слову IF: ЕСЛИ пользователю меньше 18, то показать это сообщение; ЕСЛИ пользователю 18 лет или больше, отобразите это сообщение. К счастью, в Java очень легко использовать условную логику. Начнем с операторов IF.

 

Выполнение кода, когда происходит что-то одно, а не что-то другое, очень распространено в программировании то что было разработано IF Statement. Структура оператора IF в Java:

if ( Заявление ) {

}

Вы начинаете со слова ЕСЛИ (в нижнем регистре) и пары круглых скобок. Ты затем используйте пару фигурных скобок, чтобы отделить фрагмент кода. Этот кусок кода — это код, который вы хотите выполнить только в том случае, если ваше условие выполнено. само условие заключено в круглые скобки:

if ( user < 18 ) {

}

Это условие говорит «ЕСЛИ пользователю меньше 18». Но вместо того, чтобы сказать «меньше, чем» мы используем сокращенное обозначение указателя влево угловая скобка (<). ЕСЛИ пользователю меньше 18 лет, мы хотим, чтобы что-то случиться, чтобы отобразить сообщение, например:

i f ( user < 18 ) {

// СООБЩЕНИЕ ОТОБРАЖЕНИЯ

}

Если код пользователя не меньше 18, то в фигурных скобках будет код будет пропущен, и программа продолжит свой путь вниз к последнему строка кода. Все, что вы наберете между фигурными скобками, будет выполнено только ЕСЛИ условие выполнено, и это условие заключено в круглые скобки.

Прежде чем мы попробуем это, еще одно сокращенное обозначение — это символ >. правая угловая скобка означает «больше чем». Наше заявление ЕСЛИ выше можно немного подправить, чтобы проверять для пользователей больше 18:

if ( user > 18 ) {

// СООБЩЕНИЕ НА ДИСПЛЕЕ

}

Единственное новое в этом коде — символ >. Условие теперь проверяет для пользователей старше 18 лет.

Но условие не проверяется для пользователей, которым ровно 18 лет, а только для тех, кому больше чем 18. Если вы хотите проверить наличие тех, кому 18 лет и старше, вы можете сказать «больше чем или равно». Символами для этого являются знак «больше» ( > ), за которым следует знак равенства ( = ):

if ( пользователь >= 18 ) {

// СООБЩЕНИЕ НА ДИСПЛЕЕ

}


Вы также можете проверить «меньше или равно» аналогичным образом:

if ( user <= 18 ) {

// ОТОБРАЖАЕМОЕ СООБЩЕНИЕ

} Код выше 6 содержит 6 } символ «меньше» ( < ), за которым следует равенство знак.

Давайте попробуем все это в простой программе.

Запустите новый проект, нажав Файл > Новый проект в меню панель в NetBeans. Вы можете называть свои пакеты и имена классов как угодно. Введите следующий код (имя нашего пакета — условно-логический , а Класс называется IFStatements ):

Мы установили целочисленную переменную и присвоили ей значение 17. ЕСЛИ выписка проверяет на «менее 18». Итак, сообщение между кудрявыми скобки должны быть распечатаны.

Запустите вашу программу и проверьте ее. (NetBeans имеет привычку запускать программу жирным шрифтом в окне «Проекты», а не код, который вы отобразили. К запустите код в окне кодирования, щелкните правой кнопкой мыши в любом месте кода. Из В появившемся меню выберите «Выполнить файл». Вы должны увидеть это в окне вывода:

Теперь измените значение пользовательской переменной с 17 на 18. Запустите программу. снова. Вы должны увидеть это:

Итак, программа работает нормально, без сообщений об ошибках. Просто ничего распечатывается. Причина в том, что код сообщения находится между фигурные скобки оператора IF. И оператор IF проверяет для значений меньше 18. ЕСЛИ условие не выполняется, Java игнорирует фигурные скобки в целом и движется дальше.

Упражнение
Замените символ «меньше чем» на «меньше или равно». на». Измените свое сообщение, чтобы оно подходило, что-то вроде «пользователь меньше или равно 18». Запустите программу еще раз. Вы видите сообщение?


Упражнение
Измените пользовательское значение на 20. Запустите вашу программу еще раз. Вы все еще видите сообщение?


В вашем коде может быть более одного оператора IF. Попробуйте следующий код:

На этот раз у нас есть два оператора IF. Первые тесты для значений меньше или равным 18. Второй проверяет значения больше 18. Когда код запустить со значением 18 или меньше для пользовательской переменной, вывод будет следующим:

Изменение значения пользовательской переменной на 20 дает следующее:

Таким образом, только одно из операторов IF будет выводить строку печати. И все зависит каково значение пользовательской переменной.

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

<-- Панели параметров | If ... Else -->

Назад на страницу содержания Java

Операторы If — Java Video Tutorial

Из курса: Java Essential Training: Syntax and Structure

Операторы if

— [Преподаватель] Часто программам приходится принимать решения. Поэтому нам нужно обеспечить разные пути выполнения в нашем коде. Для этого мы используем так называемые структуры принятия решений. Оператор If является наиболее распространенной структурой принятия решений в программировании. Это работает как быстрый обход внутри программы. При возникновении определенной ситуации программа выполняет указанный блок кода, а затем возвращается на основной путь выполнения. Давайте посмотрим на пример. Допустим, у нас есть команда продавцов, каждый из которых получает стандартную ставку 1000 долларов США в неделю. Любой из них, совершивший более 10 продаж на этой неделе, получает дополнительный бонус в размере 250 долларов США. Таким образом, основной путь программы — заплатить продавцу 1000 долларов США, поскольку каждый получает это, несмотря ни на что. Однако в какой-то момент нам нужно проверить, было ли выполнено условие, согласно которому продавец совершает более 10 продаж. Если это выполнено, то мы должны добавить больше к их платежу. Здесь у нас есть класс SalaryCalculator, и в его основном методе у нас есть основной путь программы. Мы инициализируем переменные для зарплаты, премии и квоты. Мы предложили пользователю ввести количество продаж, совершенных сотрудником за неделю. Теперь здесь, в строке 26, мы хотим ввести оператор If, который будет определять, должны ли мы добавлять бонус к оплате этого сотрудника в зависимости от количества сделанных им продаж. Чтобы запрограммировать оператор If, вы пишете слово if, которое является зарезервированным словом в Java, а затем следует if с открытыми и закрытыми круглыми скобками. Внутри набора круглых скобок находится условие для оценки. Это условие должно быть выражением, которое разрешается в логическое значение, которое является истинным или ложным. Таким образом, нашим выражением будет объем продаж, превышающий квоту. Затем мы добавляем набор фигурных скобок, чтобы заключить это как блок кода. Все, что находится внутри этих фигурных скобок, будет выполнено, если условие продаж больше, чем квота приводит к истинному значению. Если условие оказывается ложным, то код внутри этих фигурных скобок выполняться не будет. Итак, если сотрудник совершил более 10 продаж, мы хотим добавить бонус в размере 250 долларов США к его зарплате. Внутри фигурных скобок мы обновим переменную зарплаты с помощью бонуса, сказав, что зарплата равна тому, что уже есть в зарплате плюс бонус. Небольшое примечание о фигурных скобках для структур принятия решений: они предназначены для включения нуля или более утверждений. Однако, если у нас есть только одно выражение, технически нам не нужны фигурные скобки. Без них все равно работало бы. Хорошо. Отличная работа. Чтобы протестировать наш код, давайте запустим программу в режиме отладки, чтобы мы могли видеть ее шаг за шагом. Я продолжу и добавлю точку останова прямо здесь, в операторе If. Чтобы запустить в режиме отладки, мы можем щелкнуть правой кнопкой мыши в любом месте класса и вместо запуска выбрать отладку. Когда он спросит, сколько продаж, давайте введем 10, и обратите внимание, что программа остановилась, потому что мы поставили точку останова, и мы видим, что это условие приводит к ложному результату, потому что 10 не больше 10.