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

Sempre retorna true

Por favor não estou entendo o porque sempre retorna True,poderiam me ajudar aonde eu errei, segue as classes abaixo

public class TesteArrayListEquals {
    public static void main(String[] args) {    
    ArrayList<Conta> lista = new ArrayList<Conta>();        
        Conta cc = new ContaCorrente(10, 11);
        Conta cc2 = new ContaCorrente(21, 33); 
        lista.add(cc);
        lista.add(cc2);      
        boolean existe = lista.contains(cc2); // sempre retornando true mesmo com contas diferentes

       System.out.println("Existe? "+ existe);

       //foreach 
       for(Conta co : lista) {
       System.out.println(co);
       }

}

-------------------------------classe Conta com a subscrita -------------------------- public abstract class Conta {

protected double saldo;
private int agencia;
private int numero;
private Cliente titular;
private static int total = 0;
public Conta(int agencia, int numero){
    Conta.total++;
    //System.out.println("O total de contas é " + Conta.total);
    this.agencia = agencia;
    this.numero = numero;
    //this.saldo = 100;
    //System.out.println("Estou criando uma conta " + this.numero);
}

public abstract void deposita(double valor);
public void saca(double valor) throws SaldoInsuficienteException{

    if(this.saldo < valor) {
        throw new SaldoInsuficienteException("Saldo: " + this.saldo + ", Valor: " + valor);
    } 

    this.saldo -= valor;       
}

public void transfere(double valor, Conta destino) throws SaldoInsuficienteException{
    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("Nao pode valor menor igual a 0");
        return;
    }
    this.numero = numero;
}

public int getAgencia(){
    return this.agencia;
}

public void setAgencia(int agencia){
   if(agencia <= 0) {
       System.out.println("Nao pode valor menor igual a 0");
       return;
   }
   this.agencia = agencia;
}

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

public Cliente getTitular(){
    return this.titular;
}

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

//metodo equals subscrito-------- aqui o equals
@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;
}
//metodo toString()  subscrito 
@Override
public String toString() {
    return  "Nº" + this.getNumero() + " Ag:"+this.getAgencia();
}
4 respostas
solução!

Oi Anderson, tudo bem?

O método constains basicamente vai iterar sob todos os objetos da sua lista e verificar se a chamada ao método .equals() de algum deles retorna true para o objeto sendo comparado (target object). No caso, se houver um objeto na sua lista com os mesmos valores nas variáveis agencia e numero, a variável existe receberá sempre o valor true.

Abraço!

E ai Otávio blz, então eu entendi sua explicação, mais da uma olhada nos dois objetos contas cc1 , cc2 , estão recebendo valores diferentes. nesse exemplo não ha outros valores na lista, e mesmo assim tras True.

Então, foram criados os objetos cc e cc2, como dentro do método constains você está passando o próprio objeto cc2 que foi adicionado na sua lista, o resultado será sempre true.

Então não pode add na lista o objeto, entendi, eu estava confundindo, pensei que ele comparava os valores, mais blz muito obrigado pela ajuda

abraços

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