1
resposta

Problemas de lógica no código final do Desafio.

Percebi problemas de lógica no código do projeto final.

A aplicação encerrava ao detectar saldo insuficiente, mesmo quando a compra era igual ao saldo. Além disso, não permitia novas tentativas quando o valor era maior que o saldo disponível.

Corrigi isso ajustando o método lancaCompra e o while.

Agora, o saldo atualizado aparece a cada compra, e o usuário pode tentar novamente com um valor menor ou encerrar a aplicação. Quando o valor da compra é o mesmo do saldo , o saldo zera e o sistema exibe a lista final e encerra.

//if alterado para >=

public boolean lancaCompra(Compra compra) {
        if (this.saldo >= compra.getValor()) {
            this.saldo -= compra.getValor();
            this.compras.add(compra);
            return true;
        }
        return false;
    }
//looping modificado

while (sair != 0) {
            System.out.println("Digite a descrição da compra:");
            String descricao = leitura.next();

            System.out.println("Digite o valor da compra:");
            double valor = leitura.nextDouble();

            Compra compra = new Compra(descricao, valor);
            boolean compraRealizada = cartao.lancaCompra(compra);

            if (compraRealizada) {
                System.out.println("\nCompra realizada!");
                if (cartao.getSaldo() == 0) {
                    System.out.println("\nSaldo zerado! Encerrando compras...\n");
                    sair = 0;
                } else {
                    System.out.println("Saldo atual: " + cartao.getSaldo());
                    System.out.println("\nDigite 1 para continuar ou 0 para sair:");
                    sair = leitura.nextInt();
                }
            } else {
                System.out.println("\nSaldo insuficiente!\n");
                System.out.println("Seu saldo atual é: " + cartao.getSaldo());
                System.out.println("""
                        \nDeseja realizar uma compra de valor menor?
                        (1 para continuar / 0 para sair)
                        """);
                sair = leitura.nextInt();
            }
        }
1 resposta

Olá Pablo! Tudo certo

Que bom que conseguiu identificar e corrigir os problemas de lógica no seu código! Parece que você fez um ótimo trabalho ao ajustar o método lancaCompra e o loop while para lidar com as condições de saldo insuficiente e compras que igualam o saldo.

Ao alterar a condição if para >=, você garantiu que a compra seja realizada mesmo quando o valor é exatamente igual ao saldo disponível, o que é uma solução elegante para o problema que você estava enfrentando.

Além disso, a modificação no loop while para permitir que o usuário tente novamente com um valor menor, ou encerre a aplicação, é uma ótima maneira de melhorar a experiência do usuário. Isso torna a aplicação mais robusta e amigável.

Seu código agora não só lida com o saldo insuficiente de forma mais eficaz, mas também oferece feedback claro ao usuário sobre o saldo restante e as opções disponíveis. Isso é essencial para criar uma aplicação que seja fácil de usar e entender.

Bons estudos!