Hola, tengo un porblema con una sopa de letras, no se si alguien me podría ayudar a resolverlo, este es mi codigo, pero no funciona nada bien. A ver si alguien me puede ayudar a encontrar el problema.
import java.io.*;
import java.util.*;
import acm.program.ConsoleProgram;
public class ProyectoFinal extends ConsoleProgram
{
private final int row = 30;
private final int col = 30;
public static String palabrota="";
public static String posicion ="";
public static int k = 0;
public static void main(String[] args)
{
new ProyectoFinal().start();
}
public void run()
{
// declarando el manejador de archivos
Scanner filelector = null;
char[][] mat = new char[row][col];
// abriendo el archivo y validando que exista... si no existe lanza una excepción
try
{
filelector = new Scanner(new FileReader("Entrada.dat"));
filelector.useDelimiter("[\t\n\r]+");
rellenaMatriz(filelector, mat);
filelector.close();
}
catch (IOException a)
{
System.out.println (" No existe ese archivo ");
System.exit(1);
}
// imprime la matriz que fue copiada del archivo de entrada
for (int i = 0; i < mat.length; i++)
{
for (int j = 0; j < mat[0].length; j++)
this.print(mat[i][j]);
this.println();
}
// aqui deberas colocar la llamada al metodo de buscaPalabra
while(true)
{
this.println("Dime una palabra para buscar");
palabrota = this.readLine();
buscaPalabra(mat,palabrota.toCharArray());
if(palabrota == "sayonara")
break;
}
}
// metodo que rellena la matriz con los caracteres que se leen de un archivo
public static<T> void rellenaMatriz(Scanner lector1, char[][] mat)
{
int i = 0;
String str;
while(lector1.hasNext())
{
str = lector1.next();
for (int j= 0; j < str.length(); j++)
mat[i][j] = str.charAt(j);
i++;
}
}
/*metodo que busca la palabra (aki se validan los metodos hor, horR, ver, verR
diagonales ambos lados y en reversa*/
//hacer metodo por metodo por separado
public void buscaPalabra(char[][] mat, char[] pal)
{
int k;
//metodo horizontal
for (int i = 0; i >= 0 && i < 29; i++)
for (int j = 0; j < mat[i].length; j++)
{
if(mat[i][j] == pal[k])
k = 0;
}
for (k = 1; k < pal.length; k++)
{
if(mat[i][++j] != pal[k])
break;
this.println("La palabra " + palabrota + " esta en la posicion: "
+ i + "," + j + " de forma horizontal");
}
int k;
int i;
int j;
String palok;
//metoodo horizontal
for (i = 0; i < mat.length; i++)
{
k = 0;
palok = "";
for(j = 0; j < mat[i].length; j++)
{
if(mat[i][j] == pal[k])
for(k = 1; k < pal.length; k++)
{
palok += mat[i][j];
this.println("La palabra " + palabrota + " esta en la posicion: "
+ i + "," + j + " de forma horizontal" + "\n");
}
else
{
k = 0;
palok = "";
}
}
}
}
}
//metodo horizontal r
for (int i = 29; i >= 0 && i < 29; i++)
for (int j = 29; j < mat[i].length; j++)
if(mat[i][j] == pal[k])
for (k = 1; k < pal.length; k++)
{
if(mat[i][++j] != pal[k])
break;
posicion = ("La palabra " + pal + " esta en la posicion: "
+ i + "," + j + " de forma horizontal reversa");
k = 0;
}
//metodo vertical
for (int i = 0; i >= 0 && i < 29; i++)
for (int j = 0; j < mat[i].length; j++)
if(mat[i][j] == pal[k])
for (k = 1; k < pal.length; k++)
{
if(mat[++i][j] != pal[k])
break;
posicion = ("La palabra " + pal + " esta en la posicion: "
+ i + "," + j + " de forma vertical");
k = 0;
}
//metodo vertical r
for (int i = 29; i >= 0 && i < 29; i++)
for (int j = 29; j < mat[i].length; j++)
if(mat[i][j] == pal[k])
for (k = 1; k < pal.length; k++)
{
if(mat[--i][j] != pal[k])
break;
posicion = ("La palabra " + pal + " esta en la posicion: "
+ i + "," + j + " de forma vertical reversa");
k = 0;
}
//metodo diagonal derecha
for (int i = 0; i >= 0 && i < 29; i++)
for (int j = 0; j < mat[i].length; j++)
if(mat[i][j] == pal[k])
for (k = 1; k < pal.length; k++)
{
if(mat[++i][++j] != pal[k])
break;
posicion = ("La palabra " + pal + " esta en la posicion: "
+ i + "," + j + " de forma diagonal derecha");
k = 0;
//metodo diagonal derecha reversa
if(mat[--i][--j] != pal[k])
break;
posicion = ("La palabra " + pal + " esta en la posicion: "
+ i + "," + j + " de forma diagonal derecha reversa");
k = 0;
//metodo diagonal izquierda
if(mat[--i][++j] != pal[k])
break;
posicion = ("La palabra " + pal + " esta en la posicion: "
+ i + "," + j + " de forma diagonal izquierda");
k = 0;
//metodo diagonal izquierda reversa
if(mat[++i][--j] != pal[k])
break;
posicion = ("La palabra " + pal + " esta en la posicion: "
+ i + "," + j + " de forma horizontal");
k = 0;