有两个类: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 + ")");
}
}
答案 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
。