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

Por que o valor aparece zerado??

package calculadorajuroscompostos;

import java.util.Scanner;

public class CalculadoraJurosCompostos {
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        String retornar;
        do{
            System.out.println("------------------------------------CALCULADORA DE JUROPS COMPOSTOS------------------------------------");
            System.out.print("\nDigite o valor do Capital:     ");
            double capital = teclado.nextDouble();
            System.out.print("\nDigite o percentual da Taxa de Juros:     ");
            float taxa = teclado.nextFloat();
            System.out.print("\nDigite o Período de Tempo:     ");
            int periodoDeTempo = teclado.nextInt();
            Formula formula = new Formula(capital, taxa, periodoDeTempo);
            System.out.println("----------RESULTADO---------");
            System.out.printf("\nTOTAL DO MONTANTE É DE:     R$ %.2f", formula.resultadoDaFormula());
            System.out.print("\n\nDeseja retornar ai início?? S/N:     ");
            retornar = teclado.next();
        }while(retornar.equals("S") || retornar.equals("s"));
    }
}

package calculadorajuroscompostos;

public class DadosFormula {
    protected final double capital;
    protected final float taxaDeJuros;
    protected final int periodo;
    protected double montante;
    public DadosFormula(double capital, float taxaDeJuros, int periodo) {
        this.capital = capital;
        this.taxaDeJuros = taxaDeJuros;
        this.periodo = periodo;
    }
    public double getCapital() {
        return capital;
    }
    public float getTaxaDeJuros() {
        return taxaDeJuros;
    }
    public int getPeriodo() {
        return periodo;
    }
    public double getMontante() {
        return montante;
    }
    public void setMontante(double montante) {
        this.montante = montante;
    }
}

package calculadorajuroscompostos;

public class Formula extends DadosFormula{
    public Formula(double capital, float taxaDeJuros, int periodo) {
        super(capital, taxaDeJuros, periodo);
    }
    public double formula2(){
        double calculo = getCapital() * (Math.pow(((1 + getTaxaDeJuros()) / 100), (int)getPeriodo()));
        return calculo;
    }
    public void formula(){
        setMontante(this.formula2());
    }
    public double resultadoDaFormula(){
        return getMontante();
    }
}

Por que será que esse programa em java não calcula corretamente?? Alguém poderia me ajudar?? São três classes, a primeira de cima é a principal, a segunda é a classe Mãe e a terceira e última é a classe filha!

1 resposta

Olá, Wagner, como vai?

O valor aparece zerado porque o atributo montante nunca recebe o resultado do cálculo antes de ser retornado. Na classe Formula, o método resultadoDaFormula() apenas retorna getMontante(), mas o método formula(), responsável por executar setMontante(this.formula2()), não é chamado em nenhum momento. Como montante é um atributo do tipo double, ele é inicializado com o valor padrão 0.0, e esse é o valor exibido pelo programa.

Há também um detalhe na fórmula dos juros compostos. Atualmente você utiliza Math.pow(((1 + getTaxaDeJuros()) / 100), getPeriodo()). Se a taxa for informada como 10, por exemplo, o fator correto é 1 + (10 / 100.0), ou seja, 1.1. Na implementação atual, o cálculo utiliza (1 + 10) / 100, resultando em 0.11, o que altera completamente o resultado esperado.

Uma alternativa é chamar formula() antes de imprimir o montante ou fazer com que resultadoDaFormula() invoque esse método antes de retornar o valor calculado.

Parabéns por organizar o projeto em diferentes classes para separar as responsabilidades. Continue compartilhando suas dúvidas, pois o fórum está à disposição para ajudar no seu aprendizado.

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