el método equals se anula pero findEquals no imprime "duplicado" incluso cuando ingreso para cada nuevo objeto de Egnine las mismas 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; } } }No es suficiente anular los equals en la clase EngineStorage .
También debe anularlo en la clase Engine , de modo que Arrays.equals(Object[] a, Object[] a2) use su implementación.
Además, su método findEquals llama explícitamente a equals en las instancias de Engine , lo cual es otra razón para anular los equals en esa clase.