3
respostas

Dúvida ex. 8 - Java.lang

Olá, há algum erro no meu código, pois sempre retorna diferentes, estou com dificuldade para entender a sintaxe da sobrescrita do método equals, segue:

classe main

package br.com.bank;

import br.com.bank.programa.Conta;
import br.com.bank.programa.ContaCorrente;

public class TesteComparacao {    

    public static boolean TesteContas(ContaCorrente p, ContaCorrente s) {

        System.out.println("TESTE COM == ");
        if (p.getId() == s.getId()==true) {
            System.out.println("são IDs iguais");

        } else {
            System.out.println("são IDs diferentes");

        }

        System.out.println("=== TESTE COM EQUALS");
        if (p.equals(s)){
            System.out.printf("equivalentes");
            return true;
        }else {System.out.printf("diferentes");}
            return false;
    }

     public static void main(String[] args) {



            ContaCorrente cont = new ContaCorrente();
            cont.setId();
            ContaCorrente cont2 = new ContaCorrente();
            cont.setId();

            TesteContas(cont, cont2);


     }}

CLASSE CONTA:

package br.com.bank.programa;

import java.util.Scanner;

public abstract class Conta {

    int id;
    double saldo;
    String dono;
    String tipo;
    double taxa = 0.3;
    Scanner scn = new Scanner(System.in);
    Scanner scn2 = new Scanner(System.in);

    public void deposita() {
        System.out.println("DIGITE O VALOR A DEPOSITAR: ");

        double valor_deposito = scn.nextDouble();
        if (valor_deposito > 0) {
            this.saldo += valor_deposito;
        } else {
            throw new ValorInvalidoException(valor_deposito);
        }
    }

    public void saca() {
        System.out.println("DIGITE O VALOR DE SAQUE");
        double valor_saque = scn.nextDouble();
        this.saldo -= valor_saque;
    }

    public int getId() {
        System.out.println("this.id");
        return id;
    }

    public void setId() {
        System.out.println("DIGITE O ID DA CONTA: ");
        this.id = scn.nextInt();
    }

    public double getSaldo() {
        System.out.printf(">>> SALDO ATUALIZADO: %.2f \n ", this.saldo);
        return saldo;
    }

    public String getDono() {
        return dono;
    }

    public void setDono() {
        System.out.println("DIGITE O DONO: ");
        dono = scn2.nextLine();

    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        System.out.println("DIGITE O TIPO DE CONTA: ");
        this.tipo = scn.nextLine();
    }

    public void atualizaConta() {
        System.out.println("INSIRA O NUMERO DE MESES PARA SIMULAR");
        double meses = scn.nextInt();
        double simulacao = this.saldo * taxa * meses;
        System.out.println(">>>> VALOR SIMULADO: " + simulacao);
    }

    public String toString() {
        String a = "este objeto é uma conta, saldo >>> " + this.saldo;
        System.out.printf(a);
        return a;
    }
    @Override
     public boolean equals(Object obj) {
         Conta outraConta = (Conta) obj;

         return this.id == outraConta.id;
     }
    }
3 respostas

Opa, para mim o código não deveria compilar... qual argumento vc está passando no setId?

E isso aqui =>

if (p.getId() == s.getId()==true)

só precisa ser assim:

if (p.getId() == s.getId()) {

Fiz algumas alterações, mas continua como diferente, classe de teste:

package br.com.bank;

import br.com.bank.programa.Conta; import br.com.bank.programa.ContaCorrente;

public class TesteComparacao extends ContaCorrente {

public static boolean TesteContas(ContaCorrente p, ContaCorrente s) {

System.out.println("TESTE COM == "); if (p.getId() == s.getId()) { System.out.println("são IDs iguais"); return true; } else { System.out.println("são IDs diferentes");

} return false; }

public static boolean TesteComEquals(ContaCorrente p, ContaCorrente s) {

System.out.println("=== TESTE COM EQUALS");

if (p.equals(s)) { System.out.printf("equivalentes"); return true; } else { System.out.printf("diferentes"); } return false; }

public static void main(String[] args) {

ContaCorrente cont = new ContaCorrente(); cont.setId(); ContaCorrente cont2 = new ContaCorrente(); cont.setId();

TesteContas(cont, cont2); TesteComEquals(cont, cont2);

}

}

CLASSE CONTA

package br.com.bank.programa;

import java.util.Scanner;

public abstract class Conta {

int id; double saldo; String dono; String tipo; double taxa = 0.3; Scanner scn = new Scanner(System.in); Scanner scn2 = new Scanner(System.in);

public void deposita() { System.out.println("DIGITE O VALOR A DEPOSITAR: ");

double valor_deposito = scn.nextDouble(); if (valor_deposito > 0) { this.saldo += valor_deposito; } else { throw new ValorInvalidoException(valor_deposito); } }

public void saca() { System.out.println("DIGITE O VALOR DE SAQUE"); double valor_saque = scn.nextDouble(); this.saldo -= valor_saque; }

public int getId() { System.out.println("this.id"); return id; }

public void setId() { System.out.println("DIGITE O ID DA CONTA: "); this.id = scn.nextInt(); }

public double getSaldo() { System.out.printf(">>> SALDO ATUALIZADO: %.2f \n ", this.saldo); return saldo; }

public String getDono() { return dono; }

public void setDono() { System.out.println("DIGITE O DONO: "); dono = scn2.nextLine();

}

public String getTipo() { return tipo; }

public void setTipo(String tipo) { System.out.println("DIGITE O TIPO DE CONTA: "); this.tipo = scn.nextLine(); }

public void atualizaConta() { System.out.println("INSIRA O NUMERO DE MESES PARA SIMULAR"); double meses = scn.nextInt(); double simulacao = this.saldo taxa meses; System.out.println(">>>> VALOR SIMULADO: " + simulacao); }

public String toString() { String a = "este objeto é uma conta, saldo >>> " + this.saldo; System.out.printf(a); return a; }

@Override public boolean equals(Object oj) { if (!(oj instanceof Conta)) { return false; } Conta outraConta = (Conta) oj; if (outraConta.id == this.id) { return true; } return false; } }

Respondendo a pergunta, SetId é void...