No entiendo tu código ya que si bien el "char[][] m" puede ser tu sopa de letras y el "String s" puede ser la palabra que agregas... en ningún momento dices donde agregarla.
Entiendo que tu función es algo como esto:
Entradas: char[][] m (Sopa), String s (Palabra)
Proceso: Remplazar en la sopa de letras los espacios vacíos por las letras de la palabra agregada.
Salida: char[][] m (Sopa con las letras agregadas).
Y al menos yo no veo forma de conseguir esa salida con las entradas que me das. Por tanto, que tal si agregamos tres entradas mas: int ix (Punto x inicial), int iy (Punto y inicial) y boolean isHorizontal (Para saber si tengo que agregar la palabra en horizontal o vertical).
Con estos tres parámetros mas podrás saber en donde empezar a agregar y hacia donde agregarlo.
Normalmente no pondría todo el código, peor hoy me siento bondadoso (o malo, depende de como lo mires).
Suerte! (Cualquier cosa nos dices, seguro yo o alguien mas te responderá... me demore en responder ya que vi que no estaba en Java y quería esperar que lo cambiaran
solo por joder.)
Hola, gracias por responder.
Realmente no llega a ser una sopa de letras, digamos que tenemos una matriz de
char generados aleatoriamente. Yo le introduzco una cadena, no necesariamente tiene que estar la cadena ordenada dentro de la matriz. Y mi función debería encontrar 1 coincidencia por cada elemento del String, y esa única coincidencia sustituirla por un [
* ] .
Dicho esto, solucioné el problema que había con el OutOfBoundsException con el siguiente
public static char[][] sustituir(char[][] m, String s) {
for (int a = 0; a < s.length(); a++) {
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
if (s.charAt(a) == m[i][j]) {
m[i][j]='*';
}
}
}
}
return m;
Ahora el problema está en que tengo que sustituir una única vez cada caracter de la matriz por cada caracter de la cadena. Es decir si tengo la matriz:
A B C D E F G
H I J K L M N
O P Q R S T U
A I P T R A Z
S Z A J K P N
Y tengo la cadena ABRS quedaría así:
* * C D E F G
H I J K L M N
O P Q * * T U
A I P T R A Z
S Z A J K P N
PD: Siento lo de donde puse el post, no estoy acostumbrado a postear en foros y no vi donde iba... Gracias!
Este es el codigo de mi programa:
public class Sustituir {
public static void main(String[] args) {
int dimension=demanarDimensio();
char[][] vectorCuadro = genCuadro(dimension);
char[][] sustituido;
mostrarInstruccions();
boolean continuar;
do{
mostrarSopaLletres(vectorCuadro);
String palabra=pedirPalabra();
sustituido = sustituir(vectorCuadro, palabra);
System.out.println("----------------------------");
mostrarSopaLletres(sustituido);
continuar = preguntarContinuar();
}while (calcularLletresQueQueden(vectorCuadro) > 1 && continuar);
mostrarCredits();
}
public static void mostrarCredits() {
System.out.println("Gracias por participar en la comprobación de funcionamiento de la sopa de letras de Antonio Gonzalez la Carrubba");
System.out.println("Autor:");
System.out.println("Antonio Gonzalez la Carrubba");
}
public static boolean preguntarContinuar(){
Scanner entrada = new Scanner(System.in);
System.out.println("Quieres continuar: ");
String cont=entrada.next().toLowerCase();
if(cont.equals("si")){
return true;
}else{
return false;
}
}
public static boolean continuar(boolean continuar) {
if (continuar) {
return true;
} else {
return false;
}
}
public static int calcularLletresQueQueden(char[][] tauler) {
int cont = 0;
for (int n = 0; n < tauler.length; n++) {
for (int o = 0; o < tauler[n].length; o++) {
if (tauler[n][o] != '*') {
cont++;
}
}
}
return cont;
}
public static int demanarDimensio() {
Scanner entrada = new Scanner(System.in);
System.out.println("Introduce dimension: ");
int dimension=entrada.nextInt();
return dimension;
}
public static void mostrarInstruccions() {
System.out.println("Sopa de Letras v.1");
System.out.println("Reglas del juego");
System.out.println("Se mostrará un cuadro con letras desordenadas");
System.out.println("con las cuales el jugador debera formar palabras hasta que se terminen las letras del tablero");
System.out.println("Al final del juego se mostrará la puntuación obtenida.");
}
public static String pedirPalabra(){
Scanner entrada = new Scanner(System.in);
System.out.println("Introduce palabra: ");
String palabra=entrada.next().toUpperCase();
return palabra;
}
public static void mostrarSopaLletres(char[][] tauler) {
for (int n = 0; n < tauler.length; n++) {
for (int o = 0; o < tauler[n].length; o++) {
System.out.printf("%2c", tauler[n][o]);
}
System.out.println();
}
}
public static char[][] generarSopaLletres(int dimensio) {
char[][] vectorGen = new char[dimensio][dimensio];
for (int i = 0; i < dimensio; i++) {
for (int j = 0; j < dimensio; j++) {
vectorGen[i][j] = (char) (Math.random() * (90 - 65 + 1) + 65);
}
}
return vectorGen;
}
public static char[][] genCuadro(int cantVal) {
char[][] vectorGen = new char[cantVal][cantVal];
for (int i = 0; i < cantVal; i++) {
for (int j = 0; j < cantVal; j++) {
vectorGen[i][j] = (char) (Math.random() * (90 - 65 + 1) + 65);
}
}
return vectorGen;
}
public static char[][] sustituir(char[][] m, String s) {
for (int a = 0; a < s.length(); a++) {
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
if (s.charAt(a) == m[i][j]) {
m[i][j]='*';
}
}
}
}
return m;
}
public static int calcularPuntuacio(String par, int queden, int dimensio) {
int puntuacio;
puntuacio = (par.length() * dimensio) - queden;
return puntuacio;
}
}