Operador condicional

Ao analisar expressões booleanas de modo parecido à instrução if, exceto por: em vez de executar um bloco de código se o resultado do teste for true, ele atribui um valor a uma variável. O operador condicional é um operador ternário.

Essa estrutura é exemplificada abaixo:


        package br.devmedia;



        public class Condicional {



        public static void main(String args[]){

        System.out.println(9==9?true:false);

        System.out.println(9==9?"Java":"Devmedia");

        System.out.println(4==9?"Java":"Devmedia");

        System.out.println(4==9?"Java":(1==1?true:false));

        }



        }

        Console:

        true

        Java

        Devmedia

        true
        

Operadores lógicos

Há apenas 6 operadores lógicos que você precisa saber para o exame (&, |, ^, &&, || e !). Três destes (&, | e ^) podem ser utilizados como operadores bitwise (bit a bit).

Esses operadores comparam dois literais bit a bit e retornam uma variável cujos bits foram definidos baseados em:

  • | -> ou um ou outro ligado
  • ^ -> exatamente um ligado
  • & -> dois bits ligados

Instruções if e switch

As instruções if e loops for, são comuns em quase todas das linguagens de programação.

As instruções switch e if são os tipos de controle de decisão que permitirão ao seu programa agir de modo diferente em uma bifurcação de caminho, dependendo, obviamente, do resultado de um teste lógico.

Expressões válidas para instruções if

As instruções if podem avaliar somente valores booleanos. Note como os parênteses são capazes de subverter a ordem de precedência. O último if é o que, realmente, ilustra a precedência.


        package br.devmedia;



        public class Confuse {



        public static void main(String args []){

        int y =6, x=3;

        if(((x>4)&&(y<3))|true){

        System.out.println("Primeiro "+true);

        }

        if(((x>4)&&(y<3))|false){

        System.out.println("Segundo "+true);

        }

        if((x>4)&&((y<3)|true)){

        System.out.println("Terceiro "+true);

        }

        if((x>4)&&(y<3)|true){

        System.out.println("Quarto "+true);

        }



        }



        }
        Console:

        Primeiro true
        

O código acima se tornaria ainda mais complexo se você não inserir um conjunto de parênteses, que é o que acontece no quarto if. O terceiro e o quarto ifs produzem o mesmo efeito. A presença dos parênteses é essencial no sentido de se promover clareza e compreensão.

Um erro bastante comum cometido pelos programadores, e que pode ser difícil de identificar, é a atribuição de uma variável booleana quando a intenção seria testá-la.

Atenção com o código a seguir:


        boolean bool=false;

        if(bool=true){ }
        

Você pode pensar em uma dessas três hipóteses:

  1. O código não será compilado porque é utilizada uma atribuição ao invés de um teste de igualdade.
  2. O código será compilado e executado normalmente, mas o teste if falhará porque bool é falso.
  3. O código será compilado e executado corretamnete e o teste if será bem sucedido porque bool foi configurado como true em vez de verificar se ele é avaliado como verdadeiro, no argumento da instrução if.

A hipótese c está exata. Não é muito útil, mas correta. Dado que o resultado de qualquer atribuição é igual ao valor da variável incluído após essa atribuição, a expressão bool=true terá como resultado true.

Instruções switch

Switch é uma instrução condicional de diversos desvios, isso quer dizer que, de acordo com o resultado de uma condição pode-se executar um desvio entre os vários possíveis.

A instrução switch avalia o valor (literal) resultante de uma expressão ou variável, que chamamos de condição no parágrafo acima e, de acordo com esse valor, que pode ser dos tipos: char, byte, int, short ou um tipo enumerado, desvia a execução dos programas para um dos casos através da palavra chave case.

Veja o exemplo a seguir:


        package br.devmedia;



        public class CaseSwitch {



        public static void main(String args[]){

        int dia=2;

        switch (dia) {

        case 1:

        System.out.println("Domingo");

        break;

        case 2:

        System.out.println("Segunda-feira");

        break;

        case 3:

        System.out.println("Terça-feira");

        break;

        case 4:

        System.out.println("Quarta-feira");

        break;

        case 5:

        System.out.println("Quinta-feira");

        break;

        case 6:

        System.out.println("Sexta-feira");

        break;

        case 7:

        System.out.println("Sábado");



        default:

        System.out.println("O dia da semana está incorreto.");

        break;

        }

        }



        }
        

Na continução deste artigo trataremos um pouco mais de switch, iteradores e loops.


Leia todos artigos da série