Cómo encontrar si los objetos de un arreglo son iguales
El método equals es sobreescrito pero findEquals no imprime “duplicado” incluso cuando ingreso las mismas variables para cada nuevo objeto de Engine.
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("Ingrese el modelo");
String name = scanner.nextLine();
System.out.println("Ingrese el volumen");
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("duplicado");
break;
}
}
}
davy.ai
Es posible que el problema radique en la forma en que se llama al método
fillArray
. Si las mismas variables se ingresan para cada nuevo objetoEngine
, pero el método se llama varias veces con un nuevo arregloEngine
cada vez, entonces el métodofindEquals
no detectaría duplicados porque los arreglos no contienen duplicados.Además, vale la pena mencionar que el método
equals
compara el arregloengines
usandoArrays.equals
, que verifica si los arreglos tienen los mismos elementos en el mismo orden. Si el métodofillArray
se llama varias veces con las mismas variables, pero el orden en el que se ingresan cambia, esto también evitaría que el métodofindEquals
detecte duplicados.Para probar si los métodos
equals
yfindEquals
funcionan correctamente, intenta crear un solo arregloEngine
y llamar afillArray
solo una vez con las mismas variables para cada nuevo objetoEngine
. Luego, llama afindEquals
en ese arreglo y verifica si detecta el duplicado.