package matrizericklwp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
*
* @author Pedro Antonio Cordero Morales
*/
public class MatrizErickLWP {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
int[][] matriz = null;
//Pedimos al usuario los datos por consola para que defina las filas y columnas
try {
matriz = generarMatrizCargada();
} catch (IOException ex) {
System.out.println("Error en la lectura de la fila y/o columna");
System.exit(0);
}
//Pintamos la matriz por consola
dibujarMatriz(matriz);
//Generar resultado
getResultados(matriz);
}
public static int[][] generarMatrizCargada() throws IOException {
Integer filas, columnas;
int[][] matriz;
BufferedReader tcl = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Ingrese el numero de filas: ");
filas = Integer.parseInt(tcl.readLine());
System.out.println("Ingrese el numero de columnas: ");
columnas = Integer.parseInt(tcl.readLine());
matriz = new int[filas][columnas];
cargar(matriz);
return matriz;
}
public static void cargar(int[][] matriz) {
for (int i = 0; i < matriz.length; i++) {
for (int k = 0; k < matriz[i].length; k++) {
matriz[i][k] = (int) (Math.random() * 100);
}
}
}
public static void dibujarMatriz(int[][] matriz) {
System.out.println("\n\n Matriz resultante:\n");
for (int[] fila : matriz) {
for (int i = 0; i < fila.length; i++) {
System.out.print(fila[i] + "\t");
}
System.out.print("\n");
}
}
public static void getResultados(int[][] matriz) {
if (existeAlMenosUnNumeroRepetido(matriz)) {
int[] listaRepetidos = controlDeNumerosRepetidos(matriz);
int[][] matrizResultado = obtenerMatrizConNumeroRepetidoyVeces(listaRepetidos);
dibujarResultados(matrizResultado);
} else {
System.out.println("No hay ningún numero repetido en la matriz generada");
}
}
public static boolean existeAlMenosUnNumeroRepetido(int[][] matriz) {
boolean existeRepetido = false;
int[] lista = controlDeNumerosRepetidos(matriz);
for (int i : lista) {
existeRepetido = existeRepetido || i > 1;
}
return existeRepetido;
}
public static int[] controlDeNumerosRepetidos(int[][] matriz) {
int[] contadorRepetidos = new int[100];
for (int[] fila : matriz) {
for (int i = 0; i < fila.length; i++) {
contadorRepetidos[ fila[i] ]++;
}
}
return contadorRepetidos;
}
public static int[][] obtenerMatrizConNumeroRepetidoyVeces(int[] listaNumeros) {
int filas = cuantosNumerosRepetidosExisten(listaNumeros);
int posicion = 0;
int[][] sinCeros = new int[filas][2];
for (int ordinarLista = 0; ordinarLista < listaNumeros.length; ordinarLista++) {
if (listaNumeros[ordinarLista] > 1) {
sinCeros[posicion][0] = ordinarLista;
sinCeros[posicion][1] = listaNumeros[ordinarLista];
posicion++;
}
}
return sinCeros;
}
public static int cuantosNumerosRepetidosExisten(int[] listaNumeros) {
int numerosRepetidos = 0;
for (int i = 0; i < listaNumeros.length; i++) {
if (listaNumeros[i] > 1) {
numerosRepetidos++;
}
}
return numerosRepetidos;
}
public static void dibujarResultados(int[][] resultado) {
System.out.println("\n\n Números que se han repetido:\n");
for (int[] fila : resultado) {
System.out.print("Número: " + fila[0] + "\t" + "Veces repetido: " + fila[1]);
System.out.print("\n");
}
}
}