Hola.
Aquí la clave para no volverse loco creando un código demasiado complicado, es "modular" el código creando métodos que se dediquen a tareas muy específicas.
Mira, este podría ser el código de la clase main.
Fíjate en la parte que resalto en negrita, que es donde se recorre la matriz para mostrar las filas, excepto las que estén repetidas.
En esa parte en negrita, me ayudo de un método llamado
esRepetida() al cuál le paso el índice de la fila que tengo que decidir si mostrar o no en pantalla y también le paso la matriz a la que pertenece.
Este método se encarga exclusivamente de decirme si esa fila, está repetida en la matriz. Entonces, si NO lo está, la muestro en pantalla.
Si estuviera repetida, no hago nada, dejo que el bucle continúe y paso a la siguiente fila.
De esta manera, consigo que el método main no sea demasiado complicado y se entiende fácilmente cuál es la lógica que se está siguiendo (si está repetida, no muestro fila. Si no lo está, entonces la muestro)
Bien, pues vamos a ver ahora el código de ese método.
He incluido varios comentarios que ya sirven de explicación.
Básicamente lo que hace es recorrer la matriz con un bucle, partiendo desde el índice de la fila que le he indicado entre paréntesis, pero hacia atrás.
Vamos hacia atrás porque queremos saber si previamente a esta fila, existe otra que sea igual.
Si el bucle termina sin encontrar ninguna que sea igual, retornaremos FALSE para indicar que esta fila no es repetida y por tanto puede mostrarse en pantalla.
Pero si se encuentra una fila igual, entonces sí es repetida y retornamos TRUE inmediatamente sin esperar a que termine el bucle.
Fíjate que aquí, de nuevo, uso otro método para ayudar a que el código no se complique en exceso. Lo marco en negrita.
Ese método, se encarga exclusivamente de recibir dos filas, es decir, dos arrays de una dimensión y comprobar si sus elementos coinciden en valor y posición para determinar si son iguales o no.
Este es el código:
Como ves, el código de estos métodos por separado, no son demasiado complicados. Si quitásemos los comentarios, se quedan en muy poquitas líneas.
Así que en realidad podríamos haber puesto todo este código junto en el método main sin tener que escribir dos métodos más.
Pero entonces tendríamos un código con demasiadas líneas intrincadas, difícil de escribir y aún mucho más difícil de leer y entender la lógica que se está empleando.
En cambio, modulando el programa en métodos separados, el código queda mejor organizado y más legible a primera vista.
Por eso es importante detectar que tareas nos conviene delegar en métodos de apoyo.
Y no es difícil detectar dichas tareas, basta con primero detenerse a pensar la lógica que debemos aplicar:
- Para hacer lo que nos pide el enunciado, necesitamos
comprobar si una fila esta repetida.
- Y para comprobar si una fila está repetida, necesitamos saber cómo
determinar si dos filas son iguales
Pues esas son las tareas que hemos trabajado en métodos separados. Dividiendo el ejercicio propuesto en pequeños objetivos, conseguiremos completar su totalidad.
Espero haberte ayudado.
Pregunta si algo no se ha entendido bien.
Un saludo.