Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Como faço para exibir o valor do saldo

Quando o usuário realizar uma compra, desejo mostrar o saldo atualizado para ele. Porém estou com problemas, pois meu código sempre retorna 0.

https://github.com/NatanRib12/ProjetoJava./blob/main/src/Principal.java

2 respostas

Oi Natan,

Então, tem algumas coisas a considerar na sua classe main... Vamos começar pelo erro que você mencionou, sobre sempre receber 0:

public class Principal {
    public static void main(String[] args) {

        double limite = 0, precoProduto = 0;
        String nomeProduto;
        int condicao = 1;

        Scanner scanner = new Scanner(System.in);
        cartaoDeCredito cartao = new cartaoDeCredito(limite);

        System.out.println("Digite seu limite");
        limite = scanner.nextDouble();

        while (condicao == 1){
            System.out.println("Digite o nome do produto");
            nomeProduto = scanner.next();
            System.out.println("Digite o preço do produto");
            precoProduto = scanner.nextDouble();

            ComprasCliente compra = new ComprasCliente(nomeProduto, precoProduto);
            boolean compraRealizada = cartao.lancaCompra(compra);

            if (compraRealizada){
                System.out.println("Compra realizada com sucesso!");
                System.out.println(cartao.getSaldo());
                System.out.println("Digite 0 para finalizar ou 1 para realizar outra compra");
                condicao = scanner.nextInt();
            } else {
                System.out.println("Saldo insuficiente!");
            }
        }
    }
}

Eu rodei ele aqui e os retornos foram esses:

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

Duas coisas não funcionaram como o esperado:

1 - Fiquei com o saldo negativo, o que quer dizer que meu saldo anterior era R$0,00

2 - A transação foi aprovada mesmo eu não tendo saldo suficiente para a compra

Observe esse trecho de código:

        double limite = 0, precoProduto = 0;
        String nomeProduto;
        int condicao = 1;

        Scanner scanner = new Scanner(System.in);
        //cartão foi instanciado com o limite valendo 0
        cartaoDeCredito cartao = new cartaoDeCredito(limite);

        System.out.println("Digite seu limite");
        limite = scanner.nextDouble();

Erro 1

O causa do primeiro erro é porque quando você adiciona um novo valor à variável limite através do scanner, você não faz mais nada com ela. Para o cartao receber o valor que o usuário digitou, você precisa passar a variável lim,ite para ele após o usuário ter digitado qual será o valor do limite. Dá pra resolver isso de diversas formas, a mais simples seria apenas instanciar o CartaoDeCredito somente após capturar o limite digitado pelo usuário, assim:

        double limite = 0, precoProduto = 0;
        String nomeProduto;
        int condicao = 1;

        Scanner scanner = new Scanner(System.in);

        System.out.println("Digite seu limite");
        limite = scanner.nextDouble();
        //cartão instanciado com limite que o usuário digitou
        cartaoDeCredito cartao = new cartaoDeCredito(limite);

Erro 2

Agora com o erro 1 corrigido, o nosso programa tem o seguinte retorno:

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

O nosso programa apresenta um novo retorno e também um novo erro. Antes ele estava deixando passar transações mesmo estando com o saldo R$0,00, agora ele não deixa as transações passarem, mesmo tendo saldo suficiente para fazê-las.

Isso corre por causa da validação que é feita no método lancaCompra() da classe CartaoDeCredito:

    public boolean lancaCompra(ComprasCliente compra){
        if (this.saldo < compra.getValor()){
            this.saldo -= compra.getValor();
            return true;
        }
        return false;
    }

Nesse if você está validando da seguinte maneira:

"o valor deste saldo é menor que o compra.getValor? Se sim, permita, se não, interrompa"

Mas deveria ser o contrário, o valor da compra precisa ser menor ou igual ao valor do saldo. A correção ficaria assim:

    public boolean lancaCompra(ComprasCliente compra){
        if (this.saldo >= compra.getValor()){
            this.saldo -= compra.getValor();
            return true;
        }
        return false;
    }

Outras considerações:

  • Remover o . (ponto) do nome do repositório, isso pode gerar conflitos
  • Corigir o nome da classe cartaoDeCredito para CartaoDeCredito. É uma boa prática começar toda classe com letra maiúscula

Espero que tenha te ajudado! o/

solução!

flw :)