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 puedo eliminar/eliminar una duplicación de un elemento de matriz de objeto que está duplicado muchas veces en la matriz? (Devuelve el mismo tipo de matriz)

Intenté usar este bucle for, pero cuando hay elementos duplicados en la matriz, el bucle interno se rompe y si se colocan más de 10 elementos repetidos en la matriz, el bucle externo se rompe.

Necesito devolver una matriz del mismo tipo de objeto ya que necesito usar los métodos para seleccionar algunos valores de ella.

public Mode insT(Guide[] guide){
  Guide[] guideVo = checkGuideDuplication(guide);
}

public Guide[] checkGuideDuplication (Guide[] guide){
  for(int i = 0; i<guide.length-1; i++){
    for(int j = i+1; i<guide.length; i++){
     if(guide[i].getGuide().trim().equals(guide[j].getGuide().trim())){
      guide = (Guide[]) ArrayUtils.remove(guide); 
   }
  }
 }
 return guide;
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código en los bucles for compara las cadenas guía en el array Guide en busca de duplicados. Si se encuentra un duplicado, se utiliza el método ArrayUtils.remove() para eliminar el elemento duplicado del array. Sin embargo, hay un error en el bucle for interno donde se utiliza por error ‘i’ en lugar de ‘j’, lo que hace que no itere sobre todos los elementos del array.

    Además, hay un problema potencial donde el bucle for externo se interrumpe si se encuentran más de 10 duplicados en el array.

    Para solucionar estos problemas, el código debe actualizarse de la siguiente manera:

    public Mode insT(Guide[] guide){
      Guide[] guideVo = checkGuideDuplication(guide);
    }
    
    public Guide[] checkGuideDuplication (Guide[] guide){
      for(int i = 0; i < guide.length-1; i++){
        for(int j = i+1; j < guide.length; j++){ // corrección: cambiado i por j
         if(guide[i].getGuide().trim().equals(guide[j].getGuide().trim())){
          guide = (Guide[]) ArrayUtils.remove(guide, j); // corrección: eliminar el duplicado del índice correcto
          j--; // corrección: decrementar j para tener en cuenta el elemento eliminado
         }
        }
        if (i >= 10) { // agregar: comprobar si se han encontrado más de 10 duplicados
          break; // salir del bucle externo si es verdadero
        }
      }
      return guide;
    }
    

    Con estas actualizaciones, el bucle for interno itera correctamente sobre todos los elementos del array, y el bucle for externo ahora se interrumpe solo si se encuentran más de 10 duplicados. El valor de retorno sigue siendo un array Guide[], lo que permite el uso continuado de los métodos Guide para extraer valores.

Comments are closed.