Fundamentos de Expressões Condicionais em Java

JavaBeginner
Pratique Agora

Introdução

Neste laboratório, aprendemos os tipos de dados básicos e operadores do Java. Neste laboratório, começaremos a aprender a escrever programas orientados a procedimentos. A ideia principal é usar o paradigma das estruturas de controle: expressões condicionais.

Expressões Condicionais

Para escrever programas úteis, quase sempre precisamos verificar condições e alterar o comportamento do programa de acordo. As declarações condicionais nos dão essa capacidade.

Expressão Condicional If-Else

A forma mais simples é a declaração if-else:

Exemplo:

Escreva o seguinte código no arquivo /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");
        }
    }
}

Saída:

Execute o arquivo ifelseTest.java usando os seguintes comandos no terminal:

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

Veja a saída:

x is positive

A expressão entre parênteses é chamada de condição. Se for verdadeira, as declarações entre chaves após if são executadas. Se a condição não for verdadeira, as declarações entre chaves após else são executadas. Se nenhum else estiver pendente para visitar e a condição if for falsa, as declarações, se houver, após o if-else são executadas. A condição pode conter qualquer um dos operadores de comparação, também chamados de operadores relacionais:

Exemplo:

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

Embora essas operações provavelmente sejam familiares a você, a sintaxe que o Java usa é um pouco diferente dos símbolos matemáticos como =, ≠ e ≤. Um erro comum é usar um único sinal de igual (=) em vez de um sinal de igual duplo (==). Lembre-se de que = é o operador de atribuição e == é um operador de comparação. Além disso, não existe =< ou =>.

Os dois lados de um operador condicional precisam ser do mesmo tipo. Você só pode comparar ints com ints e doubles com doubles. Os operadores == e != funcionam com Strings, mas não fazem o que você espera. E os outros operadores relacionais não operam em strings.

Um exemplo: Se o resto quando x é dividido por 2 é 0, então sabemos que x é par e este código imprime uma mensagem com esse efeito. Se a condição for falsa, a segunda instrução de impressão é executada. Como a condição deve ser verdadeira ou falsa, exatamente uma das alternativas será executada. Se você acha que pode querer verificar a paridade (par ou ímpar) dos números com frequência, pode querer "envolver" este código em um método, da seguinte forma:

Exemplo:

Escreva o seguinte código no arquivo /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);
    }
}

Saída:

Execute o arquivo conditionTest.java usando os seguintes comandos no terminal:

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

Veja a saída:

17 is odd
18 is even

Agora você tem um método chamado printParity que imprimirá uma mensagem apropriada para qualquer inteiro que você quiser fornecer. Em main, você invocaria este método. Lembre-se sempre de que, ao invocar um método, você não precisa declarar os tipos dos argumentos que fornece. Java pode descobrir quais são os tipos. Você deve resistir à tentação de escrever coisas como: printParity(int 3). Além disso, você também pode aninhar uma condicional dentro de outra.

Exemplo:

Escreva o seguinte código no arquivo /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");
            }
        }
    }
}

Saída:

Execute o arquivo nestedConditionTest.java usando os seguintes comandos no terminal:

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

Veja a saída:

x is zero

Agora há uma condicional externa que contém dois ramos. O primeiro ramo contém uma simples instrução de impressão, mas o segundo ramo contém outra instrução condicional que tem dois ramos próprios. Ambos os ramos são instruções de impressão, mas poderiam ter sido instruções condicionais também.

A indentação ajuda a tornar a estrutura bonita e compreensível, mas, no entanto, as condicionais aninhadas ficam difíceis de ler muito rapidamente. Evite-as quando puder. Por outro lado, esse tipo de estrutura aninhada é comum, e a veremos novamente. Então, é melhor você se acostumar com isso.

Expressão Condicional Switch-Case

A declaração switch-case é outra expressão condicional. A sintaxe da declaração switch-case é assim:

Exemplo:

// 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
    ;
}

Exemplo:

Escreva o seguinte código no arquivo /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;
        }
    }
}

Saída:

Execute o arquivo switchTest.java usando os seguintes comandos no terminal:

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

Veja a saída:

2

Resumo

Neste laboratório, aprendemos expressões condicionais e dois estilos de condicionais. Elas são muito úteis para programação. No próximo laboratório, aprenderemos outras estruturas de controle: recursão e loops.