Reputation: 49
the method equals is overriden but findEquals doesn't print "duplicate" even when i enter for every Egnine's new object same variables.
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
EngineStorage that = (EngineStorage) o;
return Arrays.equals(engines, that.engines) && scanner.equals(that.scanner);
}
public void fillArray(Engine[] engines) {
for (int i = 0; i < engines.length; i++) {
System.out.println("Enter model");
String name = scanner.nextLine();
System.out.println("Enter volume");
double vol = scanner.nextDouble();
scanner.nextLine();
engines[i] = new Engine(name, vol);
}
}
public void findEquals(Engine [] engines) {
for (int i = 0; i < engines.length - 1; i++) {
if (engines[i].equals(engines[i + 1])) {
System.out.println("duplikat");
break;
}
}
}
Upvotes: 4
Views: 136
Reputation: 394156
It's not enough to override equals
in EngineStorage
class.
You should also override it in Engine
class, so that Arrays.equals(Object[] a, Object[] a2)
will use your implementation.
Besides, your findEquals
method explicitly calls equals
on Engine
instances, which is another reason to override equals
in that class.
Upvotes: 4