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

Equals Exercicio 10 capitulo java.lang Curso Java e Suas Bibliotecas

Pessoal, podem me ajudar, pq no meu código não está sendo checado também o nome , e somente o valor.

package br.com.empresa.banco.conta;

public class TestaComparacaoConta { public static void main (String [] args) throws ValorInvalidoException{ ContaCorrente c1 = new ContaCorrente(10, "Rafael"); ContaCorrente c2 = new ContaCorrente(10, "Rafa");

c1.equals(c2);

if(c1.equals(c2)){ System.out.println ("Contas iguais"); }else{ System.out.println ("Contas Diferentes"); } } }

10 respostas

Tente reescrever o método equals desta forma que funciona.

public boolean equals(Object obj, String nome) {
        Conta outraConta = (Conta) obj;
        String outroNome = (String) nome;
        return this.numero == outraConta.numero;

    }

E como eu chamo este metódo acima, na classe de teste, seria algo como c1.equals(c2); ?

Exato Rafael,

c1.equals(c2);

Só não entendi sua dúvida sobre o equals, você quer que o objeto seja considerado igual se tiver somente o nome, somente o número ou ambos iguais?

Então, gostaria que fosse considerado iguais contendo tanto nome como número iguais.

Alguém pode me ajudar, reescrevi o metodo dentro da classe conta, igual ao da correção do exercicio:

@Override
    public boolean equals(Object obj) {
        Conta outraConta = (Conta) obj;

        return this.numero == outraConta.numero && this.nome.equals(outraConta.nome);
    }

Porém agora está dando erro JavaNullPointerException.

Minha classe que está chamando o metodo acima está desta forma:

package br.com.empresa.banco.conta;

public class TestaComparacaoConta {
  public static void main (String [] args) throws ValorInvalidoException{
      ContaCorrente c1 = new ContaCorrente(10, "Rafael");
      ContaCorrente c2 = new ContaCorrente(10, "Rafa");
      boolean b;

      b= c1.equals(c2);

      System.out.println(b);
  }
}

Podem me ajudar a verificar o porque do erro, e como fazer para que a comparação também leve em consideração a String das contas?

solução!

Você esta chamando a função equals, dentro da própria equals, logo vc cria um loop infinito.

E como eu deveria fazer?

if(c1.equals(c2)){
            System.out.println("Iguais");
        }else {
            System.out.println("Diferentes");
        }

Uma conta chama o método, passando a outra conta como parâmetro para o método. Porque você criou a variável "boolean b"? A função equals já é boolean, nete caso essa variável não é necessária, o método já retorna true ou false.

Você pode colocar uma condição if dentro do método, ou pode fazer ela no método main como resultado da comparação, como neste código que coloquei.

E repare que a Observação do Kelvin é verdadeira. Você está chamando o método equals() no main, assim: "b= c1.equals(c2);". Quando o programa vai pra dentro do método, que vc sobrescreveu, ele encontra outro equals(), aqui: "this.nome.equals(outraConta.nome);". Ai da pau.

Obrigado pessoal realmente não tinha percebido isto.

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