// Entrada: Una matriz de cadenas // Salida: N vectores como palabras diferentes existan en la matriz // y cada palabra se repite M veces como palabras existan con // la misma inicial de ella. class Crea_NVectores { public static void main(String RAFA[]) { String MAT[][] = {{"Pepe", "Pico", "Xavier"},{"Xavier", "Raton", "Rafa"},{"Roberto", "Canon", "Cesped"}}; ImprimeMatriz(MAT); CreaVectores(MAT); } static void CreaVectores(String MAT[][]) { String Nombres[] = new String[MAT.length*MAT[0].length]; int Cantidades[] = new int[MAT.length*MAT[0].length]; int indice = 0; // Vector de palabras diferentes // Se hace un barrido de la matriz for (int r = 0; r < MAT.length; r++) // Cantidad de renglones for (int c = 0; c < MAT[0].length; c++) // Cantidad de columnas { if (!Existe_En_Vector(Nombres, MAT[r][c])) // Si no existe { Nombres[indice] = MAT[r][c]; // Se obtiene la palabra indice++; // incremento del indice } } // Calculo de las cantidades for (int i = 0; i < Nombres.length; i++) // Longitud del vector Nombres for (int r = 0; r < MAT.length; r++) // Barrido de la matriz for (int c = 0; c < MAT[0].length; c++) if (Nombres[i] != null) // Tiene dato? if (Nombres[i].charAt(0) == MAT[r][c].charAt(0)) // son iguales las iniciales? Cantidades[i]++; // entonces se incrementa el indice // Crea los N vectores. String VecSalida[][] = new String[MAT.length*MAT[0].length][MAT.length*MAT[0].length]; // Vector[r*c][r*c] { if (Nombres[in] != null) // Tiene dato? for (int ic = 0; ic < Cantidades[in]; ic++) // Se repite la cantidad de veces indicada VecSalida[in][ic] = Nombres[in]; // Se guarda la palabra en el vector de salida } ImprimeVector(Nombres); ImprimeVectorEntero(Cantidades); ImprimeMatriz(VecSalida); } // Existe "Palabra" en el vector Nombres? static boolean Existe_En_Vector(String Nombres[], String Palabra) { boolean Salida = false; // por defecto no existe for (int x = 0; x < Nombres.length; x++) // recorrido por el vector if (Nombres[x] != null) // Tiene dato? if (Nombres[x].compareTo(Palabra) == 0) // Son iguales? Salida = true; // Si existe return Salida; } static void ImprimeVectorEntero(int VECT[]) { for (int x = 0; x < VECT.length; x++) if (VECT[x] != 0) System.out.println(VECT[x]); } static void ImprimeVector(String VECT[]) { for (int x = 0; x < VECT.length; x++) if (VECT[x] != null) System.out.println(VECT[x]); } static void ImprimeMatriz(String MAT[][]) { String Renglon = ""; for (int r = 0; r < MAT.length; r++) { Renglon = ""; for (int c = 0; c < MAT[0].length; c++) if (MAT[r][c] != null) Renglon += "\t\t" + MAT[r][c]; System.out.println(Renglon); } } }