Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Não está fazendo a soma e nem a subtração!!

Olá! Alguém pode me ajudar?

package logicaprogramacaoaluraherpoliabsinter;
import java.util.Scanner;
public class Terminal9{
    public static void main(String[] args){
        Scanner teclado = new Scanner(System.in);
        String retornar;
        do{
            System.out.println("-----------------------------------TERMINAL BANCÁRIO-----------------------------------");
            System.out.print("\nO que deseja fazer? 1-Depositar / 2-Sacar:     ");
            int escolha = teclado.nextInt();
            switch(escolha){
                case 1:
                    System.out.print("\nDigite o valor para depositar:     ");
                    double valor = teclado.nextDouble();
                    Deposito9 deposito = new Deposito9();
                    deposito.relatorio();
                    deposito.somar(valor);
                    deposito.executar();
                    break;
                case 2:
                    System.out.print("\nDigite o valor para sacar:     ");
                    valor = teclado.nextDouble();
                    Saque9 saque = new Saque9();
                    saque.relatorio();
                    saque.subtrair(valor);
                    saque.executar();
                    break;
                default:
                    System.out.println("NÃO ENCONTRADO!");
            }
            System.out.print("\n\nDeseja retornar?? S/N:     ");
            retornar = teclado.next();
        }while(retornar.equals("S") || retornar.equals("s"));
    }
}

package logicaprogramacaoaluraherpoliabsinter;
public abstract class OperacaoBancaria9 implements Dados9{
    protected double valor;
    public void setValor(double valor) {
        this.valor = this.valor + valor;
    }
    public double getValor(){
        return valor;
    }
    public void executar(double valor){
        this.valor = valor - valor;
    }
    public void relatorio(){
        System.out.println("----------SALDO DA CONTA----------");
    }
}

package logicaprogramacaoaluraherpoliabsinter;
public interface Dados9{
    public void executar();
}

package logicaprogramacaoaluraherpoliabsinter;
public class Deposito9 extends OperacaoBancaria9 implements Dados9{
    private double depositarValor;
    public void somar(double deposito){
        this.depositarValor = deposito;
    }
    public double soma(){
        return this.depositarValor;
    }
    @Override
    public void executar(){
        super.setValor(this.soma());
        System.out.println("Deposito de " + super.getValor() + " realizado com sucesso.");
        System.out.printf("Seu saldo é de:     R$ %.2f", super.getValor());
    }
}

package logicaprogramacaoaluraherpoliabsinter;
public class Saque9 extends OperacaoBancaria9 implements Dados9{
    private double sacarValor;
    public void subtrair(double sacarValor){
        this.sacarValor = sacarValor;
    }
    public double subtrairValor(){
        return this.sacarValor;
    }
    @Override
    public void executar(){
        super.executar(this.subtrairValor());
        System.out.println("Saque de " + super.getValor() + " realizado com sucesso.");
        System.out.printf("Seu saldo é de:     R$ %.2f", super.getValor());
    }
}

Este código não está somando e nem fazendo a subtração desejada conforme na opção depósito e saque! O que poderia ser?

1 resposta

Olá, Wagner, como vai?

A principal questão é que o saldo não está sendo mantido entre uma operação e outra. A cada vez que você escolhe depositar ou sacar, um novo objeto de Deposito9 ou Saque9 é criado, então o atributo valor da classe OperacaoBancaria9 começa novamente em 0. Além disso, no método executar(double valor) da classe abstrata, você faz this.valor = valor - valor, e qualquer número menos ele mesmo sempre resulta em 0, por isso o saque nunca utiliza um saldo existente.

Por exemplo, se você depositar R$ 100, o saldo exibido será 100 porque o método setValor() soma esse valor ao saldo inicial, que era 0. Porém, ao escolher sacar R$ 50, um novo objeto Saque9 é criado com saldo 0, e o cálculo 50 - 50 resulta em 0. Dessa forma, o saldo nunca é compartilhado entre depósito e saque.

Uma alternativa é manter um único objeto que represente a conta bancária durante toda a execução do programa, armazenando o saldo nela. Assim, tanto o depósito quanto o saque atuarão sobre o mesmo valor, em vez de criar um saldo novo a cada operação.

Conte com o fórum caso surjam novas dúvidas.

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