Основы условных выражений в Java

JavaBeginner
Практиковаться сейчас

Введение

В этом практическом занятии (лабораторной работе) мы изучили основные типы данных Java и операторы. В этой лабораторной работе мы начнем изучать написание процедурно-ориентированных программ. Основная идея заключается в использовании парадигмы управляющих структур: условных выражений.

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

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

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

Самая простая форма - это оператор if-else:

Пример:

Напишите следующий код в файле /home/labex/project/ifelseTest.java:

public class ifelseTest{
    public static void main(String[] args){
        int x = 1;
        if (x > 0) {
            System.out.println("x is positive");
        }
        else{
            System.out.println("x is non-positive");
        }
    }
}

Вывод:

Запустите файл ifelseTest.java с использованием следующих команд в терминале:

javac /home/labex/project/ifelseTest.java
java ifelseTest

Посмотрите на вывод:

x is positive

Выражение в скобках называется условием. Если оно истинно, то выполняются операторы в фигурных скобках после if. Если условие ложно, то выполняются операторы в фигурных скобках после else. Если нет ожидающего else и условие if ложно, то выполняются операторы (если они есть), следующие за оператором if-else. Условие может содержать любые из операторов сравнения, также называемых отношениями:

Пример:

if (x == y){ }               // x equals y
if (x!= y){ }               // x is not equal to y
if (x > y) { }               // x is greater than y
if (x < y) { }               // x is less than y
if (x >= y){ }               // x is greater than or equal to y
if (x <= y){ }               // x is less than or equal to y

Хотя эти операции, вероятно, вам знакомы, синтаксис, используемый в Java, немного отличается от математических символов, таких как =, ≠ и ≤. Частой ошибкой является использование одного знака равенства (=) вместо двух (==). Помните, что = - это оператор присваивания, а == - оператор сравнения. Также не существует таких операторов, как =< или =>.

Две стороны условного оператора должны быть одного типа. Вы можете сравнивать только целые числа с целыми и числа с плавающей точкой с числами с плавающей точкой. Операторы == и != работают с String, но они не делают то, что вы ожидаете. И другие операторы отношений вообще не работают со строками.

Пример: Если остаток от деления x на 2 равен 0, то мы знаем, что x - четное число, и этот код выводит соответствующее сообщение. Если условие ложно, выполняется второй оператор вывода. Поскольку условие должно быть истинным или ложным, будет выполнено ровно одно из альтернативных действий. Если вы думаете, что вам часто придется проверять четность или нечетность чисел, вы можете "обернуть" этот код в метод, как показано ниже:

Пример:

Напишите следующий код в файле /home/labex/project/conditionTest.java:

public class conditionTest
{
    public static void printParity(int x) {
        if (x%2 == 0) {
            System.out.println(x + " is even");
        } else {
              System.out.println(x + " is odd");
        }
    }
    public static void main(String[] args){
        printParity(17);
        printParity(18);
    }
}

Вывод:

Запустите файл conditionTest.java с использованием следующих команд в терминале:

javac /home/labex/project/conditionTest.java
java conditionTest

Посмотрите на вывод:

17 is odd
18 is even

Теперь у вас есть метод с именем printParity, который выводит соответствующее сообщение для любого целого числа, которое вы предоставите. В main вы можете вызвать этот метод. Всегда помните, что при вызове метода вам не нужно объявлять типы аргументов, которые вы передаете. Java может определить их типы самостоятельно. Не пытайтесь писать что-то вроде: printParity(int 3). Кроме того, вы также можете вкладывать один условный оператор в другой.

Пример:

Напишите следующий код в файле /home/labex/project/nestedConditionTest.java:

public class nestedConditionTest{
    public static void main(String[] args){
        int x = 0;  // you can try x = 1, x = -1
        if (x == 0) {
            System.out.println("x is zero");
        }
        else {
            if (x > 0) {
                System.out.println("x is positive");
            }
            else {
                System.out.println("x is negative");
            }
        }
    }
}

Вывод:

Запустите файл nestedConditionTest.java с использованием следующих команд в терминале:

javac /home/labex/project/nestedConditionTest.java
java nestedConditionTest

Посмотрите на вывод:

x is zero

Теперь есть внешний условный оператор, который содержит два ветвления. Первое ветвление содержит простой оператор вывода, но второе ветвление содержит другой условный оператор, который имеет свои собственные два ветвления. Оба эти ветвления - это операторы вывода, но они также могли бы быть условными операторами.

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

Условное выражение switch-case

Оператор switch-case - это другой вид условного выражения. Синтаксис оператора switch-case выглядит так:

Пример:

// value type can be byte, short, int, char, String, but long type is not correct.
switch (variable or an value expression)
{
    // case value must be a constant value
    case value1:
    // code
    ;
    case value2:
    // code
    ;
    default:
    // code
    ;
}

Пример:

Напишите следующий код в файле /home/labex/project/switchTest.java:

public class switchTest
{
    public static void main(String[] args){
    // you can change i = 2, then try again
    int i = 2;
    switch(i)
    {
        case 1:
            System.out.println(1);
            break;
        case 2:
            System.out.println(2);
            // if no break expression, sometimes you'll get a confusing answer.
            // you can try deleting the break expression and see what happens.
            break;
        // if none of the above matches, execute the default statements
        default:
            System.out.println("default");
            break;
        }
    }
}

Вывод:

Запустите файл switchTest.java с использованием следующих команд в терминале:

javac /home/labex/project/switchTest.java
java switchTest

Посмотрите на вывод:

2

Резюме

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