Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Minha resposta

package com.github.lucasdevrj.cadastrodeprodutocomvalidacao;

import java.math.BigDecimal;

public class Produto {

    private String nome;
    private BigDecimal preco;

    public Produto(String nome, BigDecimal preco) {
        this.nome = nome;
        if (preco.compareTo(BigDecimal.ZERO) > 0) {
            this.preco = preco;
        } else {
            this.preco = BigDecimal.ZERO;
        }
    }

    public String getNome() {
        return nome;
    }

    public BigDecimal getPreco() {
        return preco;
    }

    @Override
    public String toString() {
        String produtoValido =  getPreco().compareTo(BigDecimal.ZERO) > 0 ? "" : "Produto inválido";
        return "%s\nProduto: %s\nPreço: R$%s\n".formatted(produtoValido, getNome(), getPreco());
    }
}
/**
 * Imagine que você é responsável pelo módulo de cadastro de um sistema de gestão de estoque. Durante o processo de
 * entrada de mercadorias, é crítico evitar que produtos sejam registrados com valores inconsistentes,
 * pois isso poderia causar problemas financeiros e operacionais.
 *
 * Seu desafio é implementar uma proteção que impeça a atribuição de preços negativos aos produtos,
 * garantindo que o sistema mantenha dados confiáveis.
 *
 * Crie um programa que:
 *
 * Defina uma classe para representar um produto com nome e preço.
 * Valide se o preço é um valor não negativo antes de atualizá-lo.
 * Se o valor for negativo, então deverá ser redefinido para 0.00.
 * Exiba uma mensagem quando a validação falhar.
 * Por fim, exiba uma mensagem com os dados do produto.
 * Exemplo de entrada:
 *
 * nome = "Mouse"
 * preco = -59.90
 *
 * Saída esperada:
 *
 * Preço inválido.
 * Produto: Mouse
 * Preço: 0,00
 */

package com.github.lucasdevrj.cadastrodeprodutocomvalidacao;

import java.math.BigDecimal;

public class Principal {
    public static void main(String[] args) {
        Produto produto1 = new Produto("Gabinet", new BigDecimal("-10.0"));
        Produto produto2 = new Produto("Controle", new BigDecimal("0.0"));
        Produto produto3 = new Produto("Monitor", new BigDecimal("500.00"));
        Produto produto4 = new Produto("Teclado", new BigDecimal("-90.00"));
        Produto produto5 = new Produto("Fone", new BigDecimal("50.00"));
        System.out.println(produto1);
        System.out.println(produto2);
        System.out.println(produto3);
        System.out.println(produto4);
        System.out.println(produto5);
    }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Beleza?

1 resposta
solução!

Oi, Lucas! Tudo bem?

Muito bom ver sua prática de cadastro de produtos com validação em Java usando encapsulamento, BigDecimal e uma regra clara para impedir preços negativos.

Seu código ficou bem organizado ao manter nome e preco como atributos privados e expor os dados por meio dos métodos getNome() e getPreco(). A validação no construtor também cumpre bem a proposta: quando o preço é menor que zero, ele é redefinido para BigDecimal.ZERO.

Uma dica é ajustar a mensagem para ficar exatamente como o desafio pede, usando algo como "Preço inválido." em vez de "Produto inválido", já que a inconsistência está no valor informado, não no produto em si. Também vale considerar tratar o preço 0.0 como válido, já que a regra fala em valor não negativo.

Como você adaptaria essa classe se, além do construtor, fosse necessário permitir a atualização do preço por um método setPreco() mantendo a mesma validação?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!