Java - eliminar numero repetidos en una matriz o array bidimensional

 
Vista:
sin imagen de perfil

eliminar numero repetidos en una matriz o array bidimensional

Publicado por *********** (3 intervenciones) el 28/07/2021 00:45:02
trate de adaptar la versión unidimensional a bidimensional pero no funciona y aun no logro nada ayuda!!!
la idea es que la matriz resultante solamente contenga los que no se repiten y los que se repiten obviando sus repeticiones., es decir que elimine todas las copias salvo una.

String matriz[][];
matriz=leerMatrizString("digite 4 palabras :",5,5);
String matrizB[][];
int contador=0;
for(int i = 0; i < matriz.length; i++)
{
for(int j = i + 1; j < matriz.length; j++)
{
if(i != j)
{
if(matriz[i][j] == matriz[j][i])
{
matriz[j][i] = "";
}
}
}
}
for(int i = 0; i < matriz.length; i++)
{
for(int j = i + 1; j < matriz.length; j++)
{
System.out.println(matriz[i][j]);
}
}

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

eliminar numero repetidos en una matriz o array bidimensional

Publicado por Kabuto (1381 intervenciones) el 29/07/2021 02:02:12
No se si puede hacerse con menos bucles, pero creo que con esto se consigue lo que buscas.

Lo que hace es usar bucles anidados para recorrer cada elemento.
Si no es un elemento ya "eliminado", entonces seleccionamos el valor de ese elemento.
Y abrimos una segunda tanda de bucles anidados para volver a recorrer la matriz desde el principio y buscar repetidos.

Al encontrar un repetido, comprobamos que la fila o la columna de este repetido, es distinta a la del valor seleccionado. Porque si no, estaríamos confundiendo el valor seleccionado como un repetido.

Comprobado esto, lo eliminamos.

Previamente se muestra la matriz original, y después la matriz tras eliminar repetidos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.Arrays;
import java.util.Random;
 
public class Main
{
    public static void main(String[] args) {
        String[][] matriz = new String[5][5];
        Random azar = new Random();
        //lleno matriz con números azar convertidos a String
        for (int f = 0; f < 5; f++)
            for (int c = 0; c < 5; c++)
                matriz[f][c] = Integer.toString(azar.nextInt(10));
 
        //Muestro matriz original
        for (int f = 0; f < 5; f++)
            System.out.println(Arrays.toString(matriz[f]));
 
        //Pasamos a eliminar repetidos
        for (int f = 0; f < 5; f++)
            for (int c = 0; c < 5; c++) {
                String valor = matriz[f][c]; //Seleccionamos valor a comprobar
                if (!valor.isEmpty()) { //Comprobamos que no sea un valor ya eliminado
                    //Iniciamos otra serie de bucles anidados para buscar repeticiones del valor actual
                    for (int f2 = 0; f2 < 5; f2++)
                        for (int c2 = 0; c2 < 5; c2++)
                            if (matriz[f2][c2].equals(valor)) { //Si encontramos un repetido
                                if ( f2 != f || c2 != c) //y comprobamos que no estamos en la posicion del valor que estamos consultando...
                                    matriz[f2][c2] = ""; //Entonces eliminamos el repetido
                            }
                }
            }
 
        //Mostramos la matriz tras eliminar repetidos
        System.out.println("\n**********************\n");
        for (int f = 0; f < 5; f++) {
            System.out.println(Arrays.toString(matriz[f]));
        }
    }
}

Por lo que vemos en pantalla, parece funcionar bien:
1
2
3
4
5
6
7
8
9
10
11
12
13
[1, 9, 9, 6, 5]
[3, 4, 9, 7, 6]
[8, 0, 6, 6, 5]
[0, 2, 0, 4, 1]
[4, 3, 5, 2, 1]
 
**********************
 
[1, 9, , 6, 5]
[3, 4, , 7, ]
[8, 0, , , ]
[, 2, , , ]
[, , , , ]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar