AFF Education Construa seu Futuro

Aula 30 - Operadores Lógicos && e ||

Operadores Lógicos && e ||

Os operadores lógicos são utilizados para combinar expressões booleanas e criar condições mais complexas. Os dois principais operadores lógicos em Java são o AND (&&) e o OR (||).

O operador lógico retorna um booleano (true ou false), assim como o operador relacional.

Tabelas de Verdade

Para entender completamente como funcionam os operadores lógicos, é importante conhecer suas tabelas de verdade:

Tabela de Verdade para AND (&&)

A B A && B
true true true
true false false
false true false
false false false

Tabela de Verdade para OR (||)

A B A || B
true true true
true false true
false true true
false false false

Dica: Para lembrar facilmente:

Aplicações Práticas

Vamos ver exemplos práticos de uso dos operadores lógicos em situações do mundo real:

Aprovação escolar (AND) e autorização de viagem (OR)

Para aprovação escolar, as duas condições colocadas devem ser verdadeiras.

Para autorização de viagem, basta que uma das condições seja verdadeira.

public class operadoresLogicos {
    public static void main(String[] args) {
        // Exemplo 1: Aprovação escolar. Precisa ser verdadeira ambas as condições para ser aprovado 
        boolean notaAprovada = true;
        boolean frequenciaSuficiente = true;

        boolean alunoAprovado  = (notaAprovada && frequenciaSuficiente);
        System.out.println("O aluno foi aprovado? " + alunoAprovado);

        notaAprovada = false;
        alunoAprovado  = (notaAprovada && frequenciaSuficiente);
        System.out.println("O aluno foi aprovado? " + alunoAprovado);
        
        // Exemplo2: Autorização de viagem. Precisa de apenas uma condição verdadeira.
        
        boolean temAutorizacaoDoPai = true;
        boolean temAutorizacaoDaMae = false;

        boolean podeViajar = (temAutorizacaoDaMae || temAutorizacaoDoPai);
        System.out.println("O menor pode viajar? " + podeViajar);
    }
}

O aluno foi aprovado? true

O aluno foi aprovado? false

O menor pode viajar? true

A importância do ! nas operações lógicas

O ! inverte o resultado lógico. O true vira false e o false vira true.

Usado quando o significado da variável pede que seja não-verdadeirou ou não-falso.

public class PodeDirigir {
    public static void main(String[] args) {
        boolean temCarteira = true;
        System.out.println("Tem carteira? " + temCarteira);
        boolean estaDescansado = true;
        System.out.println("Esta descansado? " + estaDescansado);
        boolean bebeuAlcool = false;
        System.out.println("Bebeu alcool? " + bebeuAlcool);
        // A importância do !
        boolean bebeuAlcool2 = !bebeuAlcool;
        System.out.println("Nao bebeu alcool? " + bebeuAlcool2);

        // bebeuAlcool sem o not (!)
        boolean podeDirigir = (temCarteira && estaDescansado && bebeuAlcool);
        System.out.println("Pode dirigir? " + podeDirigir); 
        // bebeuAlcool com o not (!)
        System.out.println("A importancia do !");
        podeDirigir = (temCarteira && estaDescansado && !bebeuAlcool);
        System.out.println("Pode dirigir? " + podeDirigir); 
    }
}

Tem carteira? true

Esta descansado? true

Bebeu alcool? false

Nao bebeu alcool? true

Pode dirigir? false

A importancia do !

Pode dirigir? true

Mais um exemplo prático

public class AplicacoesPraticas {
    public static void main(String[] args) {
        // Exemplo: Sistema de verificação de elegibilidade para empréstimo bancário
        int idade = 25;
        double salario = 3000.0;
        int tempoEmprego = 2; // anos
        boolean bomHistoricoCredito = true;
        
        // Verificando se a pessoa é elegível para empréstimo
        // Critérios: idade >= 21 E (salário > 2000 OU tempo de emprego >= 3) E bom histórico de crédito
        boolean elegivel = (idade >= 21) && (salario > 2000 || tempoEmprego >= 3) && bomHistoricoCredito;
        
        System.out.println("Dados do cliente:");
        System.out.println("Idade: " + idade);
        System.out.println("Salário: R$" + salario);
        System.out.println("Tempo de emprego: " + tempoEmprego + " anos");
        System.out.println("Bom histórico de crédito: " + bomHistoricoCredito);
        System.out.println("Elegível para empréstimo: " + elegivel);
        
        // Verificando cada condição separadamente para depuração
        boolean condicaoIdade = idade >= 21;
        boolean condicaoFinanceira = salario > 2000 || tempoEmprego >= 3;
        
        System.out.println("\nAnálise detalhada:");
        System.out.println("Condição de idade (>= 21): " + condicaoIdade);
        System.out.println("Condição financeira (salário > 2000 OU tempo de emprego >= 3): " + condicaoFinanceira);
        System.out.println("Condição de crédito: " + bomHistoricoCredito);
        
        // Exemplo: Sistema de verificação para acesso a área restrita
        boolean temCartaoAcesso = true;
        boolean estaEmHorarioPermitido = false;
        boolean ehFuncionario = true;
        boolean ehVisitanteAutorizado = false;
        
        // Verificando se pode acessar
        // Critérios: deve ter cartão de acesso E
        // (estar em horário permitido OU ser funcionário OU ser visitante autorizado)
        boolean podeAcessar = temCartaoAcesso && (estaEmHorarioPermitido || ehFuncionario || ehVisitanteAutorizado);
        
        System.out.println("\nVerificação de acesso:");
        System.out.println("Tem cartão de acesso: " + temCartaoAcesso);
        System.out.println("Está em horário permitido: " + estaEmHorarioPermitido);
        System.out.println("É funcionário: " + ehFuncionario);
        System.out.println("É visitante autorizado: " + ehVisitanteAutorizado);
        System.out.println("Pode acessar área restrita: " + podeAcessar);
    }
}

Dados do cliente:

Idade: 25

Salário: R$3000.0

Tempo de emprego: 2 anos

Bom histórico de crédito: true

Elegível para empréstimo: true

Análise detalhada:

Condição de idade (>= 21): true

Condição financeira (salário > 2000 OU tempo de emprego >= 3): true

Condição de crédito: true

Verificação de acesso:

Tem cartão de acesso: true

Está em horário permitido: false

É funcionário: true

É visitante autorizado: false

Pode acessar área restrita: true

Exercícios

Teste seus conhecimentos sobre operadores lógicos em Java:

1. Qual é o resultado da expressão: (10 > 5) && (7 < 12)?

2. Quando o operador AND (&&) retorna true?

3. Qual é a diferença entre os operadores && e & em Java?

4. No código abaixo, a pessoa poderá ir ao shopping?

        boolean serMaiorDeIdade = true;
        boolean estarAcompanhadoDeResponsavel = false;

        boolean entrarNoShopping = (serMaiorDeIdade || estarAcompanhadoDeResponsavel);
        System.out.println("Eu posso ir ao shopping? " + entrarNoShopping);

5. Complete o código para verificar se uma pessoa pode votar (precisa ter pelo menos 16 anos e ser cidadão):

int idade = 17;
boolean ehCidadao = true;
boolean podeVotar = ___________________;

Exercícios de Aplicação AFF Education

Reforce o conteúdo desta aula com mais dois exercícios práticos:

1. Qual o valor de (5 > 3) && (2 > 4)?

2. Qual o valor de (5 > 3) || (2 > 4)?