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

Na saída da lista todas contas saem com agencia e numero "0", não sai com os respectivos numeros "22, 11; 22, 22; .. etc"

insira spackage br.com.bytebank.banco.Teste.util;

import java.util.ArrayList;

import br.com.bytebank.banco.Modelo.Conta;
import br.com.bytebank.banco.Modelo.ContaCorrente;

public class Teste {

    public static void main(String[] args) {

        ArrayList lista = new ArrayList();

        Conta cc = new ContaCorrente(22, 11);
        lista.add(cc);

        Conta cc2 = new ContaCorrente(22, 22);
        lista.add(cc2);

        System.out.println(lista.size());

        Conta ref = (Conta) lista.get(0);
        System.out.println(ref.getNumero());

        lista.remove(0);

        System.out.println("Tamanho " + lista.size());

        Conta cc3 = new ContaCorrente(33, 311);
        lista.add(cc3);

        Conta cc4 = new ContaCorrente(33, 322);
        lista.add(cc4);

        for(int i = 0; i < lista.size(); i++) {
            Object oRef = lista.get(i);
            System.out.println(oRef);
        }

        System.out.println("--------------");

        for(Object oRef : lista) {
            System.out.println(oRef);
        }


    }

}
eu código aqui
8 respostas

Opa, tudo bem Welton?

Vamos lá. Primeiro é ideal que vc declare qual o tipo de dados que se ArrayList irá receber:

ArrayList<Conta> lista = new ArrayList();

Já nos ultimos pontos do seu código, vc pode implementar o toString dentro do objeto Conta para que quando faz o println apenas no objeto oRef ele printe os valores de agencia e numero.

Caso contrário ele irá printar o endereco da referencia na memória.

@Override
public String toString() {
    return this.agencia + "-" + this.numero;
}

Espero ter te ajudado. Um abraço e bons estudos. :-)

O toString() já está implementado na classe Conta, por isso achei estranho... Parace que a classe Conta não está guardando os valores de Agencia e Número da filha ContaCorrente...

Quii estranho, brow!! Coloquei seu código aqui e rodei e funcionou direitinho. Pode me passar o código da sua classe Conta e ContaCorrente por favor?

package br.com.bytebank.banco.Modelo;

/**
 * Classe que inicia um objeto do tipo Conta.
 * 
 * @version 1.0
 * @author Welton Gabriel
 *
 */

public abstract class Conta extends Object {
    protected double saldo;
    private int agencia;
    private int numero;
    private Cliente titular;
    private static int total = 0;

    /**
     * Construtor que inicia um Objeto do tipo conta com parâmetros agencia e número.
     * @param agencia
     * @param numero
     */

    public Conta(int agencia, int numero) {
        Conta.total++;
        //System.out.println("o total de contas é " + Conta.total);
        if(agencia <= 0 || numero <= 0) {
            System.out.println("Não pode numero ou agencia <=0");
            return;
        }
        }



    public abstract void deposita(double valor);

        public void saca(double valor) {
        if(this.saldo < valor) {
            throw new SaldoInsuficienteException("Saldo insuficiente para saque!");
        }
            this.saldo -= valor;

        }

    public void transfere(double valor, Conta destino) {
        this.saca(valor);
        destino.deposita(valor);
    }

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

        public int getNumero() {
            return this.numero;

        }

        public void setNumero(int numero) {
            if(numero <= 0) {
                System.out.println("Não pode numeros <= a zero");
                return;
            }
            this.numero = numero;
        }

        public int getAgencia() {
            return agencia;
        }

        public void setAgencia(int agencia) {
            if(agencia <= 0) {
                System.out.println("Não pode numero <= a zero");
                return;
            }
            this.agencia = agencia;
        }

        public void setTitular(Cliente titular) {
            this.titular = titular;
        }

        public Cliente getTitular() {
            return titular;
        }

        public static int getTotal() {
            return Conta.total;
        }

        @Override
        public boolean equals(Object ref) {

            Conta outra = (Conta) ref;

            if(this.agencia != outra.agencia) {
                return false;
            }

            if(this.numero != outra.numero) {
                return false;
            }
            return true;
        }

        @Override
        public String toString() {
            return "Numero: " + this.numero + ", Agencia: " + this.agencia;
        }
}
package br.com.bytebank.banco.Modelo;

public class ContaCorrente extends Conta implements Tributavel{

    public ContaCorrente(int agencia, int numero) {
        super(agencia, numero);
    }

    @Override
    public void saca(double valor) {
        double ValorASacar = valor + 0.2;
        super.saca(ValorASacar);
    }

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

    @Override
    public double getValorImposto() {
        return super.saldo * 0.01;
    }

    @Override
    public String toString() {
        return "ContaCorrente, " + super.toString();
    }
}

Está ai ;)

solução!

Salve brow, já identifiquei o bug. No construtor da classe Conta falta vc setar os atributos passados via parametro nas váriaveis de instância agencia e numero, caso a condição do if não seja atendida.

Fica dessa forma:

public Conta(int agencia, int numero) {
    Conta.total++;
    //System.out.println("o total de contas é " + Conta.total);
    if(agencia <= 0 || numero <= 0) {
        System.out.println("Não pode numero ou agencia <=0");
        return;
    }
    this.agencia = agencia;
    this.numero = numero;
}

Espero ter te ajudado. Um abraço e bons estudos. :-)

Obrigado amigo, resolvi aqui ;)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software