如何在本练习中实现equals方法(Java)

时间:2016-09-26 01:08:08

标签: java

有两个类:Loja(商店)和Produto(产品)

Produto班有3个孩子:DVD,CD和Livro,但他们都有以下属性:codigoBarras(barCode)

问题是:如何检查两个 produtos 是否具有相同的codigoBarras?

public class Loja {

    public static void main(String[] args){

        DVD[] dvds = new DVD[5];
        CD[] cds = new CD[5];
        Livro[] livros = new Livro[5];
        Produto[] produtos = new Produto[5];
        int i = 0, j = 0, k = 0, opção;

        Scanner input = new Scanner(System.in);

        for (int a=0; a<5 ; a++){

            System.out.println("Digite: \n\t 1 - CD \n\t 2 - DVD \n\t 3 - Livro");
            opção = input.nextInt();

            switch(opção){
                case 1:
                    CD cd1 = new CD();
                    System.out.println("\nDigite o nome: ");
                    cd1.setNome(input.next());
                    System.out.println("\nDigite o preço: ");
                    cd1.setPreço(input.nextDouble());
                    System.out.println("\nDigite o numero de faixas: ");
                    cd1.setNumeroFaixas(input.nextInt());
                    produtos[i++] = cd1;
                    break;
                case 2:
                    DVD dvd1 = new DVD();
                    System.out.println("\nDigite o nome: ");
                    dvd1.setNome(input.next());
                    System.out.println("\nDigite o preço: ");
                    dvd1.setPreço(input.nextDouble());
                    System.out.println("\nDigite a duração: ");
                    dvd1.setDuração(input.nextInt());
                    produtos[i++] = dvd1;
                    break;
                case 3:
                    Livro livro1 = new Livro();
                    System.out.println("\nDigite o nome: ");
                    livro1.setNome(input.next());
                    System.out.println("\nDigite o preço: ");
                    livro1.setPreço(input.nextDouble());
                    System.out.println("\nDigite o autor: ");
                    livro1.setAutor(input.next());
                    produtos[i++] = livro1;
                    break;   
                default: 
            }
        }  

        for (int b=0; b<i; b++){
            System.out.println("\n"+produtos[b]);
        }

    }
}

public class Produto {

    private double preço;
    private String nome;
    private long codigoBarras;

    public Produto(double preço, String nome, long codigoBarras){
        this.preço = preço;
        this.nome = nome;  
    }

    public Produto(){}

    public double getPreço() {
        return preço;
    }

    public void setPreço(double preço) {
        this.preço = preço;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public long getCodigoBarras() {
        return codigoBarras;
    }

    public void setCodigoBarras(long codigoBarras) {
        this.codigoBarras = codigoBarras;
    }  


    @Override
    public String toString(){
        return "Produto: ( " + "Nome: " + nome + ", Preço: "+ preço + ")";
    }    

    public void imprimir(){
        System.out.println("Produto: ( " + ", Nome: " + nome + ", Preço: "+ preço + ")");
    }   
}

1 个答案:

答案 0 :(得分:0)

在您的equals方法中,您只需比较produto s'codigoBarras的相等性(确定它确实是Produto后):

@Override
public boolean equals(Object other) {
    if (other == null || !(other instanceof Produto)) return false;
    Produto p = (Produto)other;
    return codigoBarras == p.codigoBarras;
}

请注意,这是唯一可能的,因为codigoBarras是一个long(值类型)。如果它是引用类型,我们将使用其equals方法来检查是否相等。

正如评论中提到的,如果您覆盖equals,您也应该覆盖hashCode