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!

1
resposta

Resolução

package com.github.lucasdevrj.exercicios.relatoriodoproduto;

public class Produto {
    String nome;
    double preco;
    int quantidade;

    public void exibirProduto() {
        String informacoes = String.format("Produto: %s\nPreço: R$ %.2f\nQuantidade em estoque: %d",
                nome, preco, quantidade);
        System.out.println(informacoes);
    }
}
/**
 * Imagine que você é responsável pelo controle de estoque de uma loja de informática que está
 * expandindo seus negócios. Com o aumento da demanda, é importante manter um registro organizado
 * e preciso de todos os produtos disponíveis. Sua tarefa é criar um sistema que armazene as
 * informações de cada item e gere um relatório para facilitar a gestão do estoque.
 *
 * Sua tarefa é criar uma classe que:
 *
 * Represente um produto com os atributos nome, preço e quantidade.
 * Implemente um método que mostre os dados formatados, garantindo que o preço seja exibido com
 * duas casas decimais.
 *
 * Exemplo de entrada:
 * nome = "Mouse Gamer"
 * preco = 159.9
 * quantidade = 25
 *
 * Saída esperada:
 * Produto: Mouse Gamer
 * Preço: R$ 159,90
 * Quantidade em estoque: 25
 */


package com.github.lucasdevrj.exercicios.relatoriodoproduto;

import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {
        Produto produto = new Produto();
        Scanner entrada = new Scanner(System.in);

        System.out.print("Digite o nome do produto: ");
        produto.nome = entrada.nextLine();

        System.out.print("Digite o preço do produto: ");
        produto.preco = entrada.nextDouble();

        System.out.print("Digite a quantidade do produto: ");
        produto.quantidade = entrada.nextInt();

        entrada.close();

        produto.exibirProduto();
    }
}

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

1 resposta

Olá, Lucas. Como vai?

Excelente trabalho em mais uma resolução! O código funcionou perfeitamente e o resultado exibido no console do IntelliJ mostra que a formatação do preço com duas casas decimais (R$ %.2f) atendeu exatamente aos requisitos do desafio. A sua escolha de usar o String.format() deixou a construção do relatório muito limpa.

Como você compartilhou a sua solução para somar com a comunidade, separei alguns pontos de melhoria contínua e boas práticas sobre modelagem em Java para você considerar nos próximos passos:

1. Aplicando o Encapsulamento

Atualmente, as variáveis de instância na classe Produto (nome, preco, quantidade) estão com o modificador de acesso padrão. Na Orientação a Objetos, o ideal é proteger esses atributos contra modificações diretas vindas de fora da classe, tornando-os private.

Para permitir o acesso controlado a eles, adicionamos os métodos públicos getters e setters. Veja como ficaria a estrutura clássica da classe:

package com.github.lucasdevrj.exercicios.relatoriodoproduto;

public class Produto {
    private String nome;
    private double preco;
    private int quantidade;

    // Construtor opcional para facilitar a criação do objeto
    public Produto() {}

    // Métodos Getters e Setters
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    public void exibirProduto() {
        String informacoes = String.format("Produto: %s\nPreço: R$ %.2f\nQuantidade em estoque: %d",
                nome, preco, quantidade);
        System.out.println(informacoes);
    }
}

Na classe Principal, em vez de fazer produto.nome = ..., você passaria a atribuir usando o método setter: produto.setNome(entrada.nextLine());.

2. Tratamento de Quebra de Linha no Scanner

Um problema muito comum ao usar a classe Scanner acontece quando misturamos leituras numéricas (nextDouble(), nextInt()) com leituras de texto (nextLine()).

No seu código atual, como o nextLine() foi colocado no início, tudo funcionou perfeitamente. Porém, se você precisasse ler o nome do produto depois de ler a quantidade, o nextInt() deixaria um caractere de quebra de linha (\n) "sobrando" no teclado. O próximo nextLine() capturaria esse \n em branco e pularia a digitação do nome.

  • Boa prática: Sempre que ler um número e precisar ler um texto logo em seguida, execute um entrada.nextLine(); vazio para limpar o buffer do teclado.

Parabéns pela dedicação na trilha de exercícios práticos, os resultados estão ótimos!

Espero que possa ter lhe ajudado!