elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayuda con Sopa De Letra En Java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con Sopa De Letra En Java  (Leído 17,134 veces)
Rijhording

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Ayuda con Sopa De Letra En Java
« en: 13 Abril 2010, 02:18 am »

En este codigo pongo lo que son las palabras en un archivo con este nombre:lo guardo en mi disco D:\\texto.txt(esto es cuando me pide el nombre del fichero)
en el texto esta esto
A      I      B      M      O      L      O      C      N
R     N     E     S     P     A     Ñ     A     I
O     C     I     X     E     M     P     R     C
G     U     A     T     E     M     A     L     A
C     B     P     A     N     A     M     A     R
H     A     Y     I     L     E     A     P     A
I     O     C     I     X     E     G     E     G
L     H     Y     A     U     G     U     R     U
E     C     U     A     D     O     R     U     A

y cuando me pide el diccionario osea las palabras a buscar esta tambien en el disco D:\\diccionario.txt el cual las palabras son:
Argentina Chile Colombia Cuba Ecuador Espana Guatemala Mexico Nicaragua Panamá Peru Uruguay

No se si se pone asi las palabras porque en el programa lo carga pero no lo resuelve no encuentro porque la razon de no encontrarlo mi programa esta hecho en netbeans
 Esperando que algun monstruo en java me ayude es para mi proyecto de Universidad Gracias.....ayudenme ps :P


import java.io.*;
public class BusquedaPalabras
{
private static final int MAX_FILAS=       64;
private static final int MAX_COLUMNAS=    64;
private static final int MAX_PALABRAS=100000;
private int filas;
private int columnas;
private int numPalabras;
private String [] palabras= new String[MAX_PALABRAS];
private BufferedReader sopaStream;
private BufferedReader palabraStream;
private char sopa[][]=new char[MAX_FILAS][MAX_COLUMNAS];
private BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

public BusquedaPalabras()
{
sopaStream = abreFichero("introduzca fichero de la sopa");
palabraStream = abreFichero("y el del diccionario");
leeSopa();
leePalabras();

}

public int resolverSopa()
{
int numPal=0;
for(int f=0;f<filas;f++)
{
        for(int c=0;c<columnas;c++)
        {
            for(int df=-1;df<=1;df++)
            {
                for(int dc=-1;dc<=1;dc++)
                {
                    if(df!=0 || dc!=0)
                    {numPal=numPal+resolverDireccion(f,c,df,dc);
}
                }
            }

        }


}




                   
return numPal;
}

private static int busquedaPrefijo(String [] a,String x,int n)
{
int inf=0;
int sup=n-1;
while(inf<sup)
{
    int med=(inf+sup)/2;
    if(a[med].compareTo(x)<0)
    {
        inf=med+1;
    }
    else
        sup=med;
}
return inf;

}

private BufferedReader abreFichero(String mensaje)
{
String nombreFichero="";
FileReader fichero;
BufferedReader fichEntrada=null;
do
    {
        System.out.println(mensaje+":");
try
    {
        nombreFichero=in.readLine();
        if(nombreFichero==null)
        System.exit(0);
        fichero=new FileReader(nombreFichero);
        fichEntrada=new BufferedReader(fichero);

        String linea;
         while((linea=fichEntrada.readLine())!=null)
            System.out.println(linea);



}
    catch(IOException e)
    {System.err.println("No se Puede Abrir"+nombreFichero);}
    }while(fichEntrada==null);
System.out.println("Abierto"+nombreFichero);
return fichEntrada;
}

private void leePalabras()
{
numPalabras=0;

try
{
    while((palabras[numPalabras]=palabraStream.readLine())!=null)
    {
        if(numPalabras!=0&& palabras[numPalabras].compareTo
          (palabras[numPalabras-1])<0)
        {
            System.err.println("El diccionario no esta ordenado"+"ordenado-saliendo");
        }
        else if(++numPalabras>=MAX_PALABRAS)
            break;
       }
    if(palabraStream.ready())
        System.err.println("Aviso: no se han leido los"+"datos-incremente MAX_PALABRAS");
}
catch(IOException e)
{}

}

private void leeSopa()
{
String unaLinea;

    try
    {
    unaLinea=sopaStream.readLine();
        if(unaLinea==null)
        {
            filas=0;
            return;
        }
    columnas=unaLinea.length();
        for(int i=0;i<columnas;i++)
            sopa[0]=unaLinea.charAt(i);

        for(filas=1;
            (unaLinea=sopaStream.readLine())!=null;filas++)
        {
            if(unaLinea.length()!=columnas)
                System.err.println("La sopa es incorrecta");

        for(int i=0;i<columnas;i++)
            sopa[filas]=unaLinea.charAt(i);
        }
      }
        catch(IOException e)
        {}
}

private int resolverDireccion(int filaBase,int colBase,int filaDelta,int colDelta)
{

    String secuencia=" ";
    int numPal=0;
    int resultadoBusqueda;

    secuencia+=sopa[filaBase][colBase];
    for(int i=filaBase+filaDelta,j=colBase+colDelta;
            i>=0&& j>=0 && i<filas && j< columnas;
            i+=filaDelta,j+=colDelta)
    {
         secuencia+=sopa[j];
         resultadoBusqueda=busquedaPrefijo(palabras,secuencia,numPal);

         if(!palabras[resultadoBusqueda].startsWith(secuencia));
         break;

         if(palabras[ resultadoBusqueda ].equals( secuencia ))
         {
         numPal++;
         System.out.println("Encontrada"+secuencia + "de" + filaBase + "" + colBase +
                            "a" + i + "" + j);
         }

    }
    return numPal;

}


}

/*void main()*/
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
    BusquedaPalabras p=new BusquedaPalabras();
    System.out.println("Resolviendo....");
    p.resolverSopa();

    }

}








En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Ayuda con Sopa De Letra En Java
« Respuesta #1 en: 13 Abril 2010, 02:30 am »

Uhh.. te rogaria que colocaras el codigo en etiquetas code=java para una mejor lectura


En línea

Rijhording

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Ayuda con Sopa De Letra En Java
« Respuesta #2 en: 13 Abril 2010, 05:44 am »

el codigo que e puesto esta para que solamente lo copien y lo prueben en sus respectivas maquinas quiero que me ayuden porfavor
En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Ayuda con Sopa De Letra En Java
« Respuesta #3 en: 13 Abril 2010, 06:33 am »

el codigo que e puesto esta para que solamente lo copien y lo prueben en sus respectivas maquinas quiero que me ayuden porfavor

jjjaja no me digas :xD, egyware quiere decir que para hacer mas entendible el codigo existen unas etiquetas, que q por cierto no colocaste

bueno volviendo al tema

1. Estas creando una matriz de 64*64 cuando es es de 10*10
2  Tu metodo para leer la sopa de letras en esta secuencia columnas=unaLinea.length(); esta mal ya que obtienes creo q 49 y en realidad tienen que ser 9
Código
  1. String t = unaLinea.replace(" ", "");
  2. columnas = t.length();

y cuando haces esto, estas mal ya que es una matriz no un arraglo

Código
  1. sopa[0]=unaLinea.charAt(i);

Quedando de la siguiente forma, junto con la lectura para completar la matriz ya que estaba mal

Código
  1. int i=0;
  2.    while((unaLinea = sopaStream.readLine())!=null){
  3.    String t = unaLinea.replace(" ", "");
  4.    columnas = t.length();
  5.     for(int j=0;j<columnas;j++)
  6.         sopa[i][j]=t.charAt(j);
  7.         i++;
  8.      }


Un Saludo.
« Última modificación: 13 Abril 2010, 06:37 am por LEYER » En línea

Rijhording

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Ayuda con Sopa De Letra En Java
« Respuesta #4 en: 13 Abril 2010, 07:10 am »

haber mi estimado amigo Layer explicame bien porfavor:
mira este el codigo que me has explicado
lo que esta de color rojo es mi codigo que lo hize y el de azul es el tuyo que me has ayudado ahora mi duda es si esta bien puesto asi o como lo tengo que poner xq puesto de esa manera no me esta buscando nada y tienes razon lo e puesto unas matrices de 64*64 y eran solamente de 10*10porfavor necesito de tu ayuda gracias


private void leeSopa()
{
String unaLinea;
int i=0;
    try
    {
    unaLinea=sopaStream.readLine();
        if(unaLinea==null)
        {
            filas=0;
            return;
        }
   /*
    columnas=unaLinea.length();
        for(int i=0;i<columnas;i++)
            sopa[0]=unaLinea.charAt(i);
  */

    while((unaLinea = sopaStream.readLine())!=null){
    String t = unaLinea.replace(" ", "");
    columnas = t.length();
       for(int j=0;j<columnas;j++)
           sopa[j]=t.charAt(j);
           i++;

      }




    for(filas=1;
            (unaLinea=sopaStream.readLine())!=null;filas++)
        {
            if(unaLinea.length()!=columnas)
                System.err.println("La sopa es incorrecta");

        //for(int i=0;i<columnas;i++)
          //  sopa[filas]=unaLinea.charAt(i);
        }
      }
        catch(IOException e)
        {}
}

En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Ayuda con Sopa De Letra En Java
« Respuesta #5 en: 13 Abril 2010, 07:13 am »

Veamos usa este ya preparado

Código
  1. private void leeSopa()
  2. {
  3. String unaLinea;
  4.    try {
  5.    int i=0;
  6.    while((unaLinea = sopaStream.readLine())!=null){
  7.    String t = unaLinea.replace(" ", "");
  8.    columnas = t.length();
  9.     for(int j=0;j<columnas;j++)
  10.         sopa[i][j]=t.charAt(j);
  11.         i++;
  12.     }
  13.     }
  14.        catch(IOException e){
  15.         e.printStackTrace();
  16.        }
  17.   }

PD[] esto no resuelve tu problema general, solo es una solucion a un problema interno

Un Saludo.
En línea

Rijhording

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Ayuda con Sopa De Letra En Java
« Respuesta #6 en: 13 Abril 2010, 07:24 am »

pero Dime amigo leyer el texto esta bien es la manera correcta de ponerlo y para lo que es diccionario tambien esta bien
me explico esto va hacer mi sopa de letras que le pongo de nombre texto.txt
x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
x x x x x x x x x
es una matris de 10*10 que sea que para x es una letra y forman algo

ahora para lo que es diccionario pongo en un archivo que lo voy a llamar diccionario.txt
y pongo lo siguiente en este orden
algo algo2 algo3 algo4 ... y asi en ese orden
o como es la manera de ponerlo derrepente es por eso que no me busca nada gracias de antemano
En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Ayuda con Sopa De Letra En Java
« Respuesta #7 en: 13 Abril 2010, 07:29 am »

Por tu manera de leer el archivo, tienes que colocarlo verticalmente

obj1
obj2
obj3

Aunke no se si ese resuelve tu problema general intenta de todas formas
En línea

Rijhording

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: Ayuda con Sopa De Letra En Java
« Respuesta #8 en: 13 Abril 2010, 08:22 am »

pucha aun no consigo buscar nada en mi archivo alguna solucion si no es mucha molestia el codigo ya lo publique en la parte de arriba  :P
En línea

kilicho

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Ayuda con Sopa De Letra En Java
« Respuesta #9 en: 14 Abril 2010, 07:39 am »

Hola amigo, queria saber si tienes tu sopa de letras lista necesito ayuda con ese tema tmb se te agradeceria te dejo mi correo -nota del mod: no se postea el mail-  gracias!
« Última modificación: 14 Abril 2010, 15:00 pm por Carloswaldo » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines