AFF Education Construa seu Futuro

Aula 31 - Operador not(!)

Operador not(!)

O operador NOT (!) inverte o valor booleano de uma variável. Pense nele como um interruptor que muda um valor para seu oposto. É como dizer "não é verdadeiro" ou "não é falso".

O operador NOT (!) é um operador unário que:

Tabela de Verdade do Operador NOT

Aqui está a tabela de verdade para o operador NOT:

A !A
true false
false true

Como você pode ver, o operador NOT simplesmente inverte o valor booleano.

Exemplos Básicos

Vamos ver como o operador NOT funciona na prática:

public class OperadorNot {
    public static void main(String[] args) {
        // Valores booleanos básicos
        boolean verdadeiro = true;
        boolean falso = false;
        
        // Aplicando o operador NOT
        boolean naoVerdadeiro = !verdadeiro;
        boolean naoFalso = !falso;
        
        // Exibindo resultados
        System.out.println("verdadeiro = " + verdadeiro);
        System.out.println("!verdadeiro = " + naoVerdadeiro);
        System.out.println("falso = " + falso);
        System.out.println("!falso = " + naoFalso);
        
        // Aplicando o operador NOT duas vezes
        boolean naoNaoVerdadeiro = !(!verdadeiro);
        System.out.println("\nAplicando o NOT duas vezes:");
        System.out.println("!(!verdadeiro) = " + naoNaoVerdadeiro);
        
        // Usando o operador NOT em expressões relacionais
        int a = 5;
        int b = 10;
        
        boolean aMaiorQueB = a > b;
        boolean aNaoMaiorQueB = !(a > b);
        
        System.out.println("\nUsando NOT com expressões relacionais:");
        System.out.println("a > b: " + aMaiorQueB);
        System.out.println("!(a > b): " + aNaoMaiorQueB);
        
        // Equivalência lógica
        System.out.println("\nEquivalência lógica:");
        System.out.println("!(a > b) é equivalente a a <= b? " + (!(a > b) == (a <= b)));
    }
}

verdadeiro = true

!verdadeiro = false

falso = false

!falso = true

Aplicando o NOT duas vezes:

!(!verdadeiro) = true

Usando NOT com expressões relacionais:

a > b: false

!(a > b): true

Equivalência lógica:

!(a > b) é equivalente a a <= b? true

A Importância do Operador NOT

O operador NOT é fundamental para controlar o fluxo de lógica em programas. Vamos ver alguns exemplos da sua importância:

public class ImportanciaOperadorNot {
    public static void main(String[] args) {
        // Exemplo 1: Verificando se um número não é par
        int numero = 7;
        boolean ehPar = numero % 2 == 0;
        boolean naoEhPar = !ehPar;  // Ou diretamente: boolean naoEhPar = !(numero % 2 == 0);
        
        System.out.println("Número: " + numero);
        System.out.println("É par? " + ehPar);
        System.out.println("Não é par? " + naoEhPar);
        
        // Exemplo 2: Verificando se uma pessoa não é elegível
        int idade = 16;
        boolean ehMaiorDeIdade = idade >= 18;
        boolean ehMenorDeIdade = !ehMaiorDeIdade;
        
        System.out.println("\nIdade: " + idade);
        System.out.println("É maior de idade? " + ehMaiorDeIdade);
        System.out.println("É menor de idade? " + ehMenorDeIdade);
        
        // Exemplo 3: Invertendo a lógica de uma condição complexa
        boolean temCarteira = false;
        boolean temAutorizacao = true;
        
        // Verificando se pode dirigir
        boolean podeDirigir = temCarteira && temAutorizacao;
        
        // Verificando se não pode dirigir (inverso da condição anterior)
        boolean naoPodeDirigir = !podeDirigir;  // Ou diretamente: boolean naoPodeDirigir = !(temCarteira && temAutorizacao);
        
        System.out.println("\nTem carteira? " + temCarteira);
        System.out.println("Tem autorização? " + temAutorizacao);
        System.out.println("Pode dirigir? " + podeDirigir);
        System.out.println("Não pode dirigir? " + naoPodeDirigir);
    }
}

Número: 7

É par? false

Não é par? true

Idade: 16

É maior de idade? false

É menor de idade? true

Tem carteira? false

Tem autorização? true

Pode dirigir? false

Não pode dirigir? true

Outro Exemplo

Vamos ver um exemplo mais elaborado do uso do operador NOT em um sistema de controle de acesso:

public class SistemaAcesso {
    public static void main(String[] args) {
        // Dados do usuário
        boolean usuarioLogado = true;
        boolean contaAtiva = true;
        boolean ehAdmin = false;
        boolean emModoManutencao = true;
        
        // Verificando acesso a funcionalidades comuns
        // Usuário precisa estar logado E com conta ativa
        boolean temAcessoBasico = usuarioLogado && contaAtiva;
        
        // Verificando acesso a área administrativa
        // Precisa ter acesso básico E ser administrador
        boolean temAcessoAdmin = temAcessoBasico && ehAdmin;
        
        // Verificando acesso durante manutenção
        // Durante a manutenção, apenas administradores podem acessar
        boolean podeAcessarDuranteManutencao = !emModoManutencao || ehAdmin;
        
        // Verificando acesso final (combinando todas as regras)
        boolean temAcessoAgora = temAcessoBasico && podeAcessarDuranteManutencao;
        
        // Exibindo resultados
        System.out.println("Dados do usuário:");
        System.out.println("Usuário logado: " + usuarioLogado);
        System.out.println("Conta ativa: " + contaAtiva);
        System.out.println("É administrador: " + ehAdmin);
        System.out.println("Sistema em manutenção: " + emModoManutencao);
        
        System.out.println("\nVerificações de acesso:");
        System.out.println("Tem acesso básico: " + temAcessoBasico);
        System.out.println("Tem acesso administrativo: " + temAcessoAdmin);
        System.out.println("Pode acessar durante manutenção: " + podeAcessarDuranteManutencao);
        System.out.println("Tem acesso ao sistema agora: " + temAcessoAgora);
        
        // E se o usuário fosse administrador?
        ehAdmin = true;
        temAcessoAdmin = temAcessoBasico && ehAdmin;
        podeAcessarDuranteManutencao = !emModoManutencao || ehAdmin;
        temAcessoAgora = temAcessoBasico && podeAcessarDuranteManutencao;
        
        System.out.println("\nE se o usuário fosse administrador:");
        System.out.println("É administrador: " + ehAdmin);
        System.out.println("Tem acesso administrativo: " + temAcessoAdmin);
        System.out.println("Pode acessar durante manutenção: " + podeAcessarDuranteManutencao);
        System.out.println("Tem acesso ao sistema agora: " + temAcessoAgora);
    }
}

Dados do usuário:

Usuário logado: true

Conta ativa: true

É administrador: false

Sistema em manutenção: true

Verificações de acesso:

Tem acesso básico: true

Tem acesso administrativo: false

Pode acessar durante manutenção: false

Tem acesso ao sistema agora: false

E se o usuário fosse administrador:

É administrador: true

Tem acesso administrativo: true

Pode acessar durante manutenção: true

Tem acesso ao sistema agora: true

Aplicação Prática

Vamos aplicar o operador NOT em um exemplo mais prático, como um sistema de verificação de elegibilidade para um programa:

public class VerificacaoElegibilidade {
    public static void main(String[] args) {
        // Critérios de elegibilidade para um programa de bolsa de estudos
        int idade = 19;
        double rendaFamiliar = 3000.0;
        boolean temOutraBolsa = false;
        boolean temEmprego = true;
        
        // Definindo as regras de elegibilidade
        // 1. Precisa ter entre 18 e 25 anos
        boolean idadeCorreta = idade >= 18 && idade <= 25;
        
        // 2. Renda familiar deve ser menor que 4000
        boolean rendaElegivel = rendaFamiliar < 4000.0;
        
        // 3. Não pode ter outra bolsa
        boolean semOutraBolsa = !temOutraBolsa;
        
        // 4. Não pode ter emprego
        boolean semEmprego = !temEmprego;
        
        // Verificação final: todas as condições devem ser atendidas
        boolean elegivel = idadeCorreta && rendaElegivel && semOutraBolsa && semEmprego;
        
        // Exibindo resultados
        System.out.println("Verificação de Elegibilidade para Bolsa de Estudos");
        System.out.println("---------------------------------------------------");
        System.out.println("Dados do candidato:");
        System.out.println("Idade: " + idade);
        System.out.println("Renda familiar: R$" + rendaFamiliar);
        System.out.println("Tem outra bolsa: " + temOutraBolsa);
        System.out.println("Tem emprego: " + temEmprego);
        
        System.out.println("\nVerificação dos critérios:");
        System.out.println("1. Idade entre 18 e 25: " + idadeCorreta);
        System.out.println("2. Renda familiar < R$4000: " + rendaElegivel);
        System.out.println("3. Não tem outra bolsa: " + semOutraBolsa);
        System.out.println("4. Não tem emprego: " + semEmprego);
        
        System.out.println("\nResultado final:");
        System.out.println("Candidato elegível para a bolsa: " + elegivel);
        
        // Identificando os motivos da não elegibilidade
        if (!elegivel) {
            System.out.println("\nMotivos da não elegibilidade:");
            
            if (!idadeCorreta) {
                System.out.println("- Idade fora da faixa permitida (18-25 anos)");
            }
            
            if (!rendaElegivel) {
                System.out.println("- Renda familiar acima do limite de R$4000");
            }
            
            if (!semOutraBolsa) {
                System.out.println("- Já possui outra bolsa");
            }
            
            if (!semEmprego) {
                System.out.println("- Possui emprego");
            }
        }
    }
}
Verificação de Elegibilidade para Bolsa de Estudos --------------------------------------------------- Dados do candidato: Idade: 19 Renda familiar: R$3000.0 Tem outra bolsa: false Tem emprego: true Verificação dos critérios: 1. Idade entre 18 e 25: true 2. Renda familiar < R$4000: true 3. Não tem outra bolsa: true 4. Não tem emprego: false Resultado final: Candidato elegível para a bolsa: false Motivos da não elegibilidade: - Possui emprego

Observação: Note como o operador NOT (!) é utilizado para verificar condições negativas (não ter outra bolsa, não ter emprego) e como é utilizado novamente nas verificações condicionais (if (!elegivel)) para identificar os motivos da não elegibilidade.

Exercícios

Teste seus conhecimentos sobre o operador NOT em Java:

1. Qual é o resultado da expressão !true?

2. Se x é false, qual será o valor de !(!x)?

3. De acordo com as Leis de De Morgan, qual expressão é equivalente a !(a || b)?

4. No código abaixo, qual será o valor de resultado?

boolean a = true;
boolean b = false;
boolean resultado = !(a && !b);

5. Complete o código para verificar se um número NÃO está dentro de um intervalo (entre 10 e 20):

int numero = 25;
boolean naoEstaNoIntervalo = ___________________;

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. Sendo boolean ativo = false;, qual o valor de !ativo?