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
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
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:
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:
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:
Espero que tenha te ajudado! o/
flw :)