Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Rijhording en 17 Mayo 2010, 20:18 pm



Título: Ayuda con mi Sopa de Letra
Publicado por: Rijhording en 17 Mayo 2010, 20:18 pm
el error es como debo de cargar mi texto que lo tengo guardado en mi disco duro no lo abre solo me sale que dice abierto mas no me lo muestra para verlo ;D:\texto.txt y D:\diccionario.txt estos son mis archivos que tengo que cargar para que pueda ver la sopa de letras pero aun asi no me hace la busqueda para mi mi codigo esta bien pero nose en que me estoy equivocando necesito de su ayuda porfavor
esto es lo que hay en mi archivo texto.txt que esta guardado en mi disco D
AIBMOLOCN
RNESPAÑAI
OCIXEMPRC
GUATEMALA
CBPANAMAR
HAYILEAPA
IOCIXEGEG
LHYAUGURU
ECUADORUA

y esto es lo que dice en diccionario.txt que tambien esta guardado en mi disco D:
Argentina
Chile
Colombia
Cuba
Ecuador
Espana
Guatemala
Mexico
Nicaragua
Panamá
Peru
Uruguay




Este es mi codigo

Código
  1. import java.io.*;
  2.  
  3.  
  4. public class BusquedaPalabras
  5. {
  6. private static final int MAX_FILAS    =                10;
  7. private static final int MAX_COLUMNAS =           10;
  8. private static final int MAX_PALABRAS =        100000;
  9. private int filas;
  10. private int columnas;
  11. private int numPalbras;
  12. private String [] palabras=new String[MAX_PALABRAS];
  13. private BufferedReader sopaStream;
  14. private BufferedReader palabraStream;
  15. private char sopa[][]= new char[MAX_FILAS][MAX_COLUMNAS];
  16.  
  17. public BusquedaPalabras()
  18. {
  19. sopaStream = abreFichero("introduzca Fichero de la Sopa");
  20. palabraStream = abreFichero("y el del diccionario");
  21. leeSopa();
  22. leePalabras();
  23. }
  24.  
  25. private BufferedReader abreFichero(String mensaje)
  26. {
  27. String nombreFichero = " ";
  28. FileReader fichero;
  29. BufferedReader fichEntrada = null;
  30.  
  31. do
  32. {
  33.    System.out.println(mensaje + ":");
  34.  
  35.    try
  36.    {
  37.      nombreFichero=in.readLine();
  38.      if(nombreFichero==null)
  39.          System.exit(0);
  40.      fichero = new FileReader(nombreFichero);
  41.      fichEntrada= new BufferedReader(fichero);
  42.    }
  43.    catch(IOException e)
  44.    {System.err.println("No se puede abrir"+nombreFichero);}
  45. }while(fichEntrada==null);
  46.  
  47. System.out.println("Abierto" + nombreFichero);
  48. return fichEntrada;
  49. }
  50.  
  51. private void leePalabras()
  52. {
  53.  
  54. int numPalabras=0;
  55.  
  56. try
  57. {
  58.    while((palabras[numPalabras]= palabraStream.readLine())!=null)
  59.         {
  60.                if(numPalabras!=0 && palabras[numPalbras].compareTo(palabras[numPalbras-1])<0)
  61.                {
  62.                 System.err.println("El Diccionario no esta"+"ordenado-saliendo");
  63.                 continue;
  64.                }
  65.                else if(++numPalbras>=MAX_PALABRAS)
  66.                break;
  67.         }
  68.  
  69.            if(palabraStream.ready())
  70.              System.err.println("Aviso: no se han leido los "+"datos-incremente MAX_PALABRAS");
  71. }
  72. catch(IOException e)
  73. {}
  74. }
  75.  
  76.  
  77. private void leeSopa()
  78. {
  79. String unaLinea;
  80.    try {
  81.    int i=0;
  82.    while((unaLinea = sopaStream.readLine())!=null){
  83.    String t = unaLinea.replace(" ", "");
  84.    columnas = t.length();
  85.     for(int j=0;j<columnas;j++)
  86.         sopa[i][j]=t.charAt(j);
  87.         i++;
  88.     }
  89.     }
  90.        catch(IOException e){
  91.         e.printStackTrace();
  92.        }
  93.   }
  94. /*
  95.  private void leeSopa()
  96. {
  97. String unaLinea;
  98.  
  99.     try
  100.     {
  101.     unaLinea=sopaStream.readLine();
  102.         if(unaLinea==null)
  103.         {
  104.             filas=0;
  105.             return;
  106.         }
  107.         columnas=unaLinea.length();
  108.         for(int i=0;i<columnas;i++)
  109.             sopa[0][i]=unaLinea.charAt(i);
  110.  
  111.         for(filas=1;
  112.             (unaLinea=sopaStream.readLine())!=null;filas++)
  113.         {
  114.             if(unaLinea.length()!=columnas)
  115.                 System.err.println("La sopa es incorrecta");
  116.  
  117.         for(int i=0;i<columnas;i++)
  118.             sopa[filas][i]=unaLinea.charAt(i);
  119.         }
  120.       }
  121.         catch(IOException e)
  122.         {}
  123. }
  124. */
  125. private int resolverDireccion(int filaBase,int colBase,int filaDelta,int colDelta)
  126. {
  127.  
  128.    String secuencia=" ";
  129.    int numPal=0;
  130.    int resultadoBusqueda;
  131.  
  132.    secuencia+=sopa[filaBase][colBase];
  133.    for(int i=filaBase+filaDelta,j=colBase+colDelta;
  134.            i>=0&& j>=0 && i<filas && j< columnas;
  135.            i+=filaDelta,j+=colDelta)
  136.    {
  137.         secuencia+=sopa[j];
  138.         resultadoBusqueda=busquedaPrefijo(palabras,secuencia,numPal);
  139.  
  140.         if(!palabras[resultadoBusqueda].startsWith(secuencia))
  141.         break;
  142.  
  143.         if(palabras[resultadoBusqueda].equals(secuencia) )
  144.         {
  145.         numPal++;
  146.         System.out.println("Encontrada"+secuencia + "de" + filaBase + "" + colBase +
  147.                            "a" + i + "" + j);
  148.         }
  149.  
  150.    }
  151.    return numPal;
  152.  
  153. }
  154.  
  155. private static int busquedaPrefijo(String [] a,String x,int n)
  156. {
  157. int inf=0;
  158. int sup=n-1;
  159. while(inf<sup)
  160. {
  161.    int med=(inf+sup)/2;
  162.    if(a[med].compareTo(x)<0)
  163.    {
  164.        inf=med+1;
  165.    }
  166.    else
  167.        sup=med;
  168. }
  169. return inf;
  170.  
  171. }
  172.  
  173.  
  174. public int resolverSopa()
  175. {
  176. int numPal=0;
  177. for(int f=0;f<filas;f++)
  178. {
  179.        for(int c=0;c<columnas;c++)
  180.        {
  181.            for(int df=-1;df<=1;df++)
  182.            {
  183.                for(int dc=-1;dc<=1;dc++)
  184.                {
  185.                    if(df!=0 || dc!=0)
  186.                    {numPal=numPal+resolverDireccion(f,c,df,dc);
  187. }
  188.                }
  189.            }
  190.  
  191.        }
  192.  
  193.  
  194. }
  195. return numPal;
  196. }
  197.  
  198.  
  199.  
  200. }
  201.  
  202. /*Void main*/
  203. public class Main {
  204.  
  205.    /**
  206.      * @param args the command line arguments
  207.      */
  208.    public static void main(String[] args)
  209.    {
  210.    BusquedaPalabras p=new BusquedaPalabras();
  211.    System.out.println("Resolviendo....");
  212.    p.resolverSopa();
  213.    }
  214.  
  215. }
  216.  
  217.  
  218. [code=/java]
[/code]