Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Como fazer um "if = 0" usando BigDecimal

Olá a todos!

No meu projeto, preferi classificar o atributo Salário como BigDecimal.

Até aqui, tudo ocorreu bem.

O problema surgiu quando precisei fazer um IF para retornar "salario = null", como no exemplo feito na aula.

Mas, pelo que estou vendo, "salario == 0" é interpretado como "int", o que causa "type mismatch" com o BigDecimal.

Alguém sabe como eu posso montar corretamente esse IF, para poder digitar algo e retornar o "salario = null"?

System.out.println("Digite o salário");
        BigDecimal salario = scanner.nextBigDecimal();

        if (salario == 0) {   // "Incompatible operand types BigDecimal and int"
            salario = null;
        }
3 respostas

Aparentemente, consegui resolver fazendo da seguinte forma:

System.out.println("Digite o salário");
        BigDecimal salario = scanner.nextBigDecimal();

        if (salario == BigDecimal.ZERO) { 
            salario = null;
        }

É isso mesmo?

solução!

Olá Fabiano!

Dá pra usar também o equals:

if(salario.equals(BigDecimal.ZERO)    salario = null;

Sua intenção é deixar o salário nullo é isso mesmo? Cuidado ao fazer isso porque você pode tomar o Null Exception Pointer ao trabalhar com o BigDecimal dessa maneira, não sei qual a intenção, mas eu prefiro trabalhar com valor 0 pra evitar esse problema.

Dependendo da situação você também pode utilizar o metodo compareTo do Bigdecimal.

if(salario.compareTo(new BigDecimal("0")) == 0)
if(salario.compareTo(BigDecimal.ZERO) == 0)

Esse método retorna 3 valores

  • -1: se seu numero for menor
  • 0: se seu numero for igual
  • 1 : se seu numero for maior

Excelente, Ailton! Muito obrigado!

O salario = null é sugestão do instrutor do curso que, ao realizar uma busca dinâmica, permite ignorar alguns termos na busca.

Ele fez isso com todos os parâmetros de busca:

public void menu(Scanner scanner) {
        System.out.println("Digite o nome (0 para ignorar)");
        String nome = scanner.nextLine();
        nome = scanner.nextLine();

        if (nome.equalsIgnoreCase("0")) {
            nome = null;
        }

        System.out.println("Digite o cpf (0 para ignorar)");
        String cpf = scanner.nextLine();

        if (cpf.equalsIgnoreCase("0")) {
            cpf = null;
        }

        System.out.println("Digite o salário (0 para ignorar)");
        BigDecimal salario = scanner.nextBigDecimal();

        if (salario == BigDecimal.ZERO) { 
            salario = null;
        }

        System.out.println("Digite a data de contratação (0 para ignorar)");
        String data = scanner.next();

        LocalDate dataDeContratacao;

        if (data.equalsIgnoreCase("0")) {
            dataDeContratacao = null;
        } else {
            dataDeContratacao = LocalDate.parse(data, formatter);
        }

        List<Funcionario> funcionarios = funcionarioRepository
                .findAll(Specification
                .where(
                    FuncionarioSpecification.nome(nome))
                    .or(FuncionarioSpecification.cpf(cpf))
                    .or(FuncionarioSpecification.salario(salario))
                    .or(FuncionarioSpecification.dataDeContratacao(dataDeContratacao))
                );
        funcionarios.forEach(System.out::println);
    }