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

Impressão diferente da do exemplo:

Só estou recebendo como retorno isso: Saldo Total: 0.0 Segue meu código:

class Conta { // classe Conta();
    //private double saldo; // Atributo saldo;
    protected double saldo; // Saldo deve ser protegido por protected pois as classe extendidas terão acesso a seus dados.
        public double getSaldo() { // Metodo para poder acessar o saldo;
            return this.saldo;
        }
        public void deposita(double valor) { // Metodo para deposito;
            this.saldo += valor;
        }
        public void saca(double valor) { // Metodo para saque;
            this.saldo -= valor;
        }
        public void atualiza(double taxa) { // Metodo para atualizar a conta de acordo com uma taxa percentual fornecida.
            this.saldo += this.saldo * taxa; // saldo recebe saldo * taxa.
        }
}

class ContaCorrente extends Conta {
    public void atualiza(double taxa) { // Metodo para atualizar a conta de acordo com uma taxa percentual fornecida.
            this.saldo += this.saldo * taxa * 2; // saldo recebe saldo * taxa. na conta corrente deve ser o dobro;
        }
}

class ContaPoupanca extends Conta {
    public void atualiza(double taxa) { // Metodo para atualizar a conta de acordo com uma taxa percentual fornecida.
            this.saldo += this.saldo * taxa * 3; // saldo recebe saldo * taxa. na cpoupañça deve ser o triplo.
        }
    public void deposita(double valor) { // metodo de deposito para poupanaça deve ser diferente do mesmo metodo em conta porque se cobra uma taxa de 10 centavos.
        this.saldo += valor - 0.10;  // o saldo recebe valor Menos 10 centavos.
    }
}

class AtualizadorDeContas { // classe que atualiza todas as contas e gera relatorio com saldo anterior e atual de cada conta.
    private double saldoTotal = 0; // atributo que guarda todo o dinheiro do banco foi atualizado.
        public double getSaldoTotal() {
            return this.saldoTotal;
        }

    private double selic;

    public AtualizadorDeContas(double selic) { // construtor atualizadordecontas.
        this.selic = selic;
    }

    public void roda(Conta c) { // metodo para atualização e geração de relatorios das contas
        System.out.println("===============================");
        System.out.println("Saldo anterior: " + c.getSaldo()); // imprime o saldo anterior
        c.atualiza(this.selic); // atualiza a conta com a taxa selic,
        System.out.println("Saldo atualizado: " + c.getSaldo()); // e depois imprime o saldo final
        this.saldoTotal += c.getSaldo(); // lembrando de somar o saldo final ao atributo saldoTotal
    }
}

class TestaConta { // classe "Programa";
    public static void main(String[] args) {
        Conta c = new Conta(); // Iniciando conta. Digo que conta é c e recebe uma nova conta();
        Conta cc = new ContaCorrente(); // Iniciando contacorrente. digo que contacorrente é cc e que recebe uma nova contacorrente();
        Conta cp = new ContaPoupanca(); // iniciando a contaPoupança. Digo que ContaPoupanca é cp e que recebe uma nova contapoupanca();

            c.deposita(1000); // setando o valor do deposito na conta.
            cc.deposita(1000); // setando o valor do deposito na contacorrente.
            cp.deposita(1000); // setando o valor de deposito na poupança.

            c.atualiza(0.01); // Setando o valor da taxa de atualização da conta.
            cc.atualiza(0.01); // Setando o valor da taxa de atualização da contacorrente.
            cp.atualiza(0.01); // Setando o valor da taxa de atualização da contapoupança.

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

class TestaAtualizadorDeContas { // classe para testar os atualizadores de contas.
    public static void main(String[] args) {
        Conta c = new Conta();
        Conta cc = new ContaCorrente();
        Conta cp = new ContaPoupanca();

        AtualizadorDeContas adc = new AtualizadorDeContas(0.01);

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

        System.out.println("Saldo Total: " + adc.getSaldoTotal());

    }        
}
6 respostas

Olá Pablo,

faltou chamar o método roda do adc para cada uma das contas (c, cc e cp) para ele atualizar os saldos e armazenar no saldoTotal.

solução!

Faltou chamar o método roda

class TestaAtualizadorDeContas { // classe para testar os atualizadores de contas.
    public static void main(String[] args) {
        Conta c = new Conta();
        Conta cc = new ContaCorrente();
        Conta cp = new ContaPoupanca();

        AtualizadorDeContas adc = new AtualizadorDeContas(0.01);

        c.deposita(1000);
        cc.deposita(1000);
        cp.deposita(1000);
        adc.roda(c);

        System.out.println("Saldo Total: " + adc.getSaldoTotal());

    }        
}

O lucas respondeu, não tinha visto.

Olá, fiz o que sugeriram e imprimiu este resultado:

================
Saldo anterior: 1000.0
Saldo atualizado:     1010.0
Saldo total: 1010.0

Creio que deve está certo, porém não estou entendendo porque está diferindo do resultado que mostra como respostada da atividade, vocês podem explicar porque está tendo essa discrepância? Acredito que o professor da atividade deve ter feito uma conta a mais...

Resultado que é mostrado na atividade:

===============================
Saldo anterior: 1000.0
Saldo atualizado: 1010.0
===============================
Saldo anterior: 1000.0
Saldo atualizado: 1020.0
===============================
Saldo anterior: 999.9
Saldo atualizado: 1029.897
Saldo Total: 3059.897

Tem que chamar o método roda para cada uma das 3 contas - você aparentemente está chamando apenas para uma delas.

Entendi onde estava errando e fiz a correção, segue o código como ficou pra quem estiver com a mesma duvida e visualizar este tópico:

class Conta { // classe Conta();
    //private double saldo; // Atributo saldo;
    protected double saldo; // Saldo deve ser protegido por protected pois as classe extendidas terão acesso a seus dados.
        public double getSaldo() { // Metodo para poder acessar o saldo;
            return this.saldo;
        }
        public void deposita(double valor) { // Metodo para deposito;
            this.saldo += valor;
        }
        public void saca(double valor) { // Metodo para saque;
            this.saldo -= valor;
        }
        public void atualiza(double taxa) { // Metodo para atualizar a conta de acordo com uma taxa percentual fornecida.
            this.saldo += this.saldo * taxa; // saldo recebe saldo * taxa.
        }
}

class ContaCorrente extends Conta {
    public void atualiza(double taxa) { // Metodo para atualizar a conta de acordo com uma taxa percentual fornecida.
            this.saldo += this.saldo * taxa * 2; // saldo recebe saldo * taxa. na conta corrente deve ser o dobro;
        }
}

class ContaPoupanca extends Conta {
    public void atualiza(double taxa) { // Metodo para atualizar a conta de acordo com uma taxa percentual fornecida.
            this.saldo += this.saldo * taxa * 3; // saldo recebe saldo * taxa. na cpoupañça deve ser o triplo.
        }
    public void deposita(double valor) { // metodo de deposito para poupanaça deve ser diferente do mesmo metodo em conta porque se cobra uma taxa de 10 centavos.
        this.saldo += valor - 0.10;  // o saldo recebe valor Menos 10 centavos.
    }
}

class AtualizadorDeContas { // classe que atualiza todas as contas e gera relatorio com saldo anterior e atual de cada conta.
    private double saldoTotal = 0; // atributo que guarda todo o dinheiro do banco foi atualizado.
        public double getSaldoTotal() {
            return this.saldoTotal;
        }

    private double selic;

    public AtualizadorDeContas(double selic) { // construtor atualizadordecontas.
        this.selic = selic;
    }

    public void roda(Conta c) { // metodo para atualização e geração de relatorios das contas
        System.out.println("===============================");
        System.out.println("Saldo anterior: " + c.getSaldo()); // imprime o saldo anterior
        c.atualiza(this.selic); // atualiza a conta com a taxa selic,
        System.out.println("Saldo atualizado: " + c.getSaldo()); // e depois imprime o saldo final
        this.saldoTotal += c.getSaldo(); // lembrando de somar o saldo final ao atributo saldoTotal
    }
}

class TestaConta { // classe "Programa";
    public static void main(String[] args) {
        Conta c = new Conta(); // Iniciando conta. Digo que conta é c e recebe uma nova conta();
        Conta cc = new ContaCorrente(); // Iniciando contacorrente. digo que contacorrente é cc e que recebe uma nova contacorrente();
        Conta cp = new ContaPoupanca(); // iniciando a contaPoupança. Digo que ContaPoupanca é cp e que recebe uma nova contapoupanca();

            c.deposita(1000); // setando o valor do deposito na conta.
            cc.deposita(1000); // setando o valor do deposito na contacorrente.
            cp.deposita(1000); // setando o valor de deposito na poupança.

            c.atualiza(0.01); // Setando o valor da taxa de atualização da conta.
            cc.atualiza(0.01); // Setando o valor da taxa de atualização da contacorrente.
            cp.atualiza(0.01); // Setando o valor da taxa de atualização da contapoupança.

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

class TestaAtualizadorDeContas { // classe para testar os atualizadores de contas.
    public static void main(String[] args) {
        Conta c = new Conta();
        Conta cc = new ContaCorrente();
        Conta cp = new ContaPoupanca();

        AtualizadorDeContas adc = new AtualizadorDeContas(0.01);

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

        adc.roda(c);
        adc.roda(cc);
        adc.roda(cp);

        System.out.println("Saldo Total: " + adc.getSaldoTotal());
    }        
}