1
resposta

Desafio

package Desafio9;

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

public class Principal {
    public static void main(String[] args) {
        Scanner ler = new Scanner(System.in);
        int opcao = 0;
        int carrinho = 0;

        Desafio item1 = new Desafio();
        item1.setItem("Sapato");
        item1.setValorItem(150);

        Desafio item2 = new Desafio();
        item2.setItem("Controle de Ps5");
        item2.setValorItem(500);

        List<Desafio> lista = new ArrayList<>();

        MeuSaldo saldoConta = new MeuSaldo();

        System.out.println("Digite seu saldo inicial: ");
        double saldoInicial = ler.nextDouble();
        saldoConta.definirSaldo(saldoInicial);


        while (opcao != 4) {
            System.out.println("""
                    Digite a opção: 
                    1 - Uma nova Compra
                    2 - Carrinho
                    3 - Meu saldo atual
                    4 - sair
                    """);
            opcao = ler.nextInt();

            switch (opcao) {
                case 1: {
                    System.out.println("Voce tem a opção 1: " + item1 + " e a opção 2: " + item2);
                    System.out.println("Oque vc quer comprar: ");
                    carrinho = ler.nextInt();
                    if (carrinho == 1) {
                        lista.add(item1);
                        saldoConta.debitar(item1.getValorItem());
                    } else if (carrinho == 2) {
                        lista.add(item2);
                        saldoConta.debitar(item2.getValorItem());
                    } else {
                        System.out.println("Opção invalida");
                    }
                    System.out.println("Quer escolher outra coisa?");
                    System.out.println("sim = 1 e não = 2 ");
                    int leitura = ler.nextInt();
                    if (leitura == 1) {
                        break;
                    } else if (leitura == 2) {
                        break;
                    }
                    break;
                }
                case 2: {
                    if (lista.isEmpty()) {
                        System.out.println("Carrinho Vazio");
                    } else {
                        for (Desafio item : lista) {
                            System.out.println("No carrinho " + item.getItem());
                            System.out.println("Valor " + item.getValorItem());
                        }
                    }
                    break;
                }
                case 3: {
                    saldoConta.exibirGasto();
                    break;
                }
                case 4: {
                    return;
                }

            }

        }
    }
}
package Desafio9;

import java.util.Scanner;

public class MeuSaldo {
    private double meuSaldo;

    public void definirSaldo(double valor) {
        this.meuSaldo = valor;
    }

    public double getMeuSaldo() {
        return meuSaldo;
    }

    public void setMeuSaldo(double meuSaldo) {
        this.meuSaldo = meuSaldo;
    }

    public void exibir() {
        Scanner ler = new Scanner(System.in);
        System.out.println("Informe o saldo da sua conta: ");
        ler.nextDouble();
    }

    public void debitar(double valor) {
        if (valor <= meuSaldo) {
            meuSaldo -= valor;

            System.out.println("Compra realizada com sucesso");
        } else {
            System.out.println("Saldo insuficiente");
        }

    }
    public void exibirGasto() {
        System.out.println("Saldo atual é: " + meuSaldo);
    }
}
package Desafio9;

public class Desafio {
    private String item;
    private double valorItem;


    public String getItem() {

        return item;
    }

    public void setItem(String item) {

        this.item = item;
    }

    public double getValorItem() {

        return valorItem;
    }

    public void setValorItem(double valorItem) {

        this.valorItem = valorItem;
    }

    @Override
    public String toString() {

        return this.item + " Custa " + this.valorItem;
    }
}
1 resposta

Oi, Alfredo! Como vai?

Agradeço por compartilhar.

Fico muito feliz em ver a estrutura que você criou para esse desafio. Você conseguiu aplicar conceitos importantes de Orientação a Objetos, como a separação de responsabilidades entre as classes, o uso de listas para armazenar objetos e a manipulação de métodos para controle de saldo.

Seu código tá bem organizado e cumpre o papel de um sistema de compras funcional.

Destaques do seu Código:

  • Uso de ArrayList: Você utilizou corretamente a lista para armazenar os objetos do tipo Desafio, o que permite manter o histórico do carrinho.
  • Encapsulamento: As classes Desafio e MeuSaldo utilizam atributos privados com seus respectivos getters e setters, seguindo as boas práticas do Java.
  • Método toString: A sobrescrita do método toString na classe Desafio facilitou bastante a exibição dos itens no console.
  1. Nomenclatura de Classes

Em Java, é comum darmos nomes que representem o que o objeto é. Por exemplo, a classe Desafio poderia se chamar Produto ou ItemCompra, pois ela representa um item que está sendo vendido. Isso deixa o código mais intuitivo para outros desenvolvedores.

  1. Validação no Débito

No seu método debitar da classe MeuSaldo, você já verifica se o saldo é suficiente. Uma dica legal é impedir que o item seja adicionado à lista caso o saldo seja insuficiente. No seu switch, a lógica atual adiciona o item à lista e só depois chama o débito. Se o saldo for insuficiente, o item permanece na lista. Você pode ajustar assim:

if (saldoConta.getMeuSaldo() >= item1.getValorItem()) {
    lista.add(item1);
    saldoConta.debitar(item1.getValorItem());
} else {
    System.out.println("Saldo insuficiente para este item.");
}
  1. Organização do Scanner

Percebi que você criou um Scanner dentro da classe MeuSaldo no método exibir. O ideal é ter apenas um Scanner na classe Principal e passar os valores necessários para os métodos por meio de parâmetros, evitando criar múltiplos objetos de leitura que podem causar conflitos no console.

Evoluindo o Carrinho

Se você quiser deixar a visualização do carrinho mais organizada, pode utilizar um laço for simples ou um forEach para exibir o resumo final antes de encerrar o programa.

Parabéns pelo progresso e pela dedicação em praticar a lógica com listas. Continue explorando as coleções do Java, como o Collections.sort, caso queira ordenar os itens por valor no futuro.

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