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

Resolução

/**
 * Você está desenvolvendo o sistema de checkout de um e-commerce de produtos eletrônicos.
 * Seu desafio é calcular o valor total do carrinho de compras, considerando que cada produto
 * pode ter quantidades diferentes e preços variados.
 *
 * Crie um programa que:
 *
 * Defina uma classe com os atributos nome, preço e quantidade.
 * Implemente um método que retorne o valor total do item (preço x quantidade).
 * Crie uma lista de item e calcule o valor total da compra.
 *
 * Exemplo de entrada:
 * i1.nome = "Teclado";
 * i1.preco = 120.0;
 * i1.quantidade = 1;
 *
 * i2.nome = "Mouse";
 * i2.preco = 60.0;
 * i2.quantidade = 2;
 *
 * Saída esperada:
 * Total da compra: R$ 240.00
 */

package com.github.lucasdevrj.exercicios.carrinhodecompras;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Carrinho {

    List<Produto> produtos = new ArrayList<>();
    Scanner entrada = new Scanner(System.in);
    BigDecimal valorTotal = BigDecimal.ZERO;;

    void adicionarProduto() {
        do {
            Produto produto = new Produto();

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

            if (produto.nome.equals("sair")) {
                break;
            }

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

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

            entrada.nextLine();
            produtos.add(produto);
            System.out.println("Produto adicionado com sucesso.");

        } while (true);
    }

    BigDecimal calculaValorTotal() {
        for (Produto produto : produtos) {
            BigDecimal precoDoProduto = produto.preco;
            BigDecimal quantidadeDoProduto = BigDecimal.valueOf(produto.quantidade);
            BigDecimal valorTotalProduto = precoDoProduto.multiply(quantidadeDoProduto);
            this.valorTotal = this.valorTotal.add(valorTotalProduto);
        }
        return this.valorTotal;
    }

    void exibirValorTotalDoCarrinho() {
        System.out.printf("\nTotal da compra: R$ %.2f", calculaValorTotal());
    }
}
package com.github.lucasdevrj.exercicios.carrinhodecompras;

import java.math.BigDecimal;

public class Produto {

    String nome;
    BigDecimal preco;
    int quantidade;
}
package com.github.lucasdevrj.exercicios.carrinhodecompras;

public class Principal {
    public static void main(String[] args) {
        Carrinho carrinho = new Carrinho();
        carrinho.adicionarProduto();
        carrinho.exibirValorTotalDoCarrinho();
    }
}

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

1 resposta
solução!

Oi, Lucas! Como vai?

A organização das classes Carrinho, Produto e Principal demonstra uma boa compreensão de separação de responsabilidades, que é um princípio fundamental da orientação a objetos. Trabalhar com import correto dos pacotes, como java.math.BigDecimal, java.util.ArrayList e java.util.Scanner, já mostra atenção aos detalhes desde o início do código.

O uso de BigDecimal para lidar com preco e valorTotal é uma escolha muito acertada. Em sistemas de e-commerce reais, trabalhar com valores monetários usando tipos como double ou float pode gerar erros de precisão nos cálculos. O BigDecimal garante que operações como multiply entre o preco e a quantidade sejam feitas com total confiabilidade, o que é essencial quando o System.out precisa exibir um total correto para o cliente. A leitura via Scanner na entrada dos dados também está bem aplicada, respeitando a sequência de nome, preco e quantidade de cada produto adicionado à lista produtos.

Uma dica interessante para evoluir ainda mais o seu código é criar um método dentro da própria classe Produto para calcular o valor total de cada item. Dessa forma, a responsabilidade do cálculo fica onde ela realmente pertence. Veja o exemplo abaixo:


BigDecimal calcularTotal() {
    return preco.multiply(BigDecimal.valueOf(quantidade));
}

Com esse método, o loop dentro de calculaValorTotal() fica mais limpo, pois basta chamar produto.calcularTotal() e acumular no valorTotal do carrinho. Isso deixa a leitura do código mais fluida e facilita futuras manutenções, como adicionar descontos por produto, por exemplo. O uso de new para instanciar cada Produto dentro do loop também está correto e garante que cada objeto seja independente na lista.

Você também pode considerar encapsular os atributos nome, preco e quantidade usando modificadores de acesso private e criando métodos getters e setters com o modificador public. Esse é um passo natural para tornar o código mais robusto e alinhado com as boas práticas do Java, além de preparar a estrutura para crescer com segurança em projetos maiores.

No geral, sua solução está bem estruturada, resolve o problema proposto com clareza e demonstra evolução consistente no aprendizado. Continue assim.

Pensando em evoluções futuras desse sistema, como você implementaria a remoção de um produto já adicionado ao carrinho antes de finalizar a compra?

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