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.
- 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.
- 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.");
}
- 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 com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!