6
respostas

Resultado diferente? Por quê?

Galera no exercício 4 de Herança eu fiz tudo aparentemente certo, porém o último resultado que era para exibir o valor de R$ 1.030,00 mostrou R$ 927,00

Resultado da compilação

1.01
1.02
0.927

Meu código:

class Conta {

    protected double saldo;

    public double getSaldo () {
        return this.saldo;
    }

    public void deposita (double valor) {
        this.saldo += valor;
    }

    public void saca (double valor) {
        this.saldo -= valor;
    }

    public void atualiza (double taxa) {
        this.saldo += this.saldo * taxa;
    }

}

class ContaCorrente extends Conta{

    public void atualiza (double taxa) {
        this.saldo += this.saldo * taxa * 2;
    }

}

class ContaPoupanca extends Conta{

    public void atualiza (double taxa) {
        this.saldo += this.saldo * taxa * 3;
    }

    public void deposita (double valor) {
        this.saldo += valor - 0.10;
    }

}

class TestaConta {

    public static void main (String[] args) {

        Conta c = new Conta();
        ContaCorrente cc = new ContaCorrente(); 
        ContaPoupanca cp = new ContaPoupanca();

        c.deposita(1.000);
        cc.deposita(1.000);
        cp.deposita(1.000);

        c.atualiza(0.01);
        cc.atualiza(0.01);
        cp.atualiza(0.01);

        System.out.println(c.getSaldo());
        System.out.println(cc.getSaldo());
        System.out.println(cp.getSaldo());


    }

}
6 respostas

Olá, creio que o que está provocando esse erro é a chamada do método deposita(), pois como parâmetro você está passando 1.000, o que seria 1, ou (1 vírgula zero zero zero). Com isso o resultado não sai como esperado. Ao trabalhar com números de ponto flutuantes, o ponto funciona como o separador de casa decimal.

Você pode invocar o método das seguintes formas

c.deposita(1000);
// ou
c.deposita(1000.00);

Espero ter ajudado :D

Sim Mateus eu acabei de notar isso aqui, mas tem um porém, na resposta deste exercício mostra os resultados:

Você deve ter obtido o seguinte resultado:

1010.0
1020.0
1030.0 //Como deu este valor se é removido R$0,10?

Estranho, já que o meu método deposita() está usando o da classe ContaPoupanca(já que estou usando uma variável(cp) de referência dela) onde esse método remove dez centavos da conta, logo não teria lógica o resultado ser um número redondo.

Será que o exercício está errado? :v

Atualizei o meu código corrigindo a posição da virgula e deu certo, porém a última resposta não irá bater por causa dos dez centavos.

Resultado:

1010.0
1020.0
1029.9

Também não cheguei ao resultado do exercício e nem nesse valor 1029,9 tirando os 0,10 centavos.

Pelas minhas contas, me corrige se estiver errado.

Primeiro é feito um depósito de 1000.0, e neste momento já é retirado os 0,10 do valor, sendo depositado 999,90.

Quando é atualizado é 999.9 e não o valor original

Saldo = 999.90 Taxa 0.01 3 Saldo = 1029.897

Será que é isso mesmo?

É exatamente isso Rubens.

Agora só não entendi o por quê do resultado do exercício ser um número redondo 1030, sendo que existe este detalhe.

Testa assim:

System.out.println(Math.ceil(cp.getSaldo()));