es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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;
        }
    }
}
Tags:  ,

Answer

  1. Avatar for 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 objeto Engine, pero el método se llama varias veces con un nuevo arreglo Engine cada vez, entonces el método findEquals no detectaría duplicados porque los arreglos no contienen duplicados.

    Además, vale la pena mencionar que el método equals compara el arreglo engines usando Arrays.equals, que verifica si los arreglos tienen los mismos elementos en el mismo orden. Si el método fillArray 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étodo findEquals detecte duplicados.

    Para probar si los métodos equals y findEquals funcionan correctamente, intenta crear un solo arreglo Engine y llamar a fillArray solo una vez con las mismas variables para cada nuevo objeto Engine. Luego, llama a findEquals en ese arreglo y verifica si detecta el duplicado.

Comments are closed.