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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Duda sobre este ejercicio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda sobre este ejercicio  (Leído 1,745 veces)
CarlosvAlencia

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Duda sobre este ejercicio
« en: 15 Febrero 2014, 17:39 pm »

Hola buenas tardes a ver tengo una duda sobre un ejercicio : El ejercicio consiste en formar palabras de tamaño mayores o iguales que 3 con la condicion de que se sean palindromas. Es decir tu tienes un tablero de nxn caracteres y tienes que formar palabras con esa condicion y sin que se pueda usar la misma casilla en la palabra. Tengo el codigo casi echo pero no se como hacer lo de que no se use la misma casilla dos veces alguien me puede ayudar?
El codigo es este :
public class Crossword {
   //Atributes
   
   private ArrayList<String> list;
   private char[][] panel;
   private int size;
   
   //Constructor
   public Crossword(int size , char[][] panel){
      this.size=size;
      this.panel=panel;
      this.list = new ArrayList<String>();
   }
   //Class anonima
   public Comparator<String> lexicographically = new Comparator<String>(){
                public int compare(String o1, String o2) {
                  if (o1.length() > o2.length()) {
                     return 1;
                        } else
                              if (o1.length() < o2.length()) {
                                 return -1;
                              }
                  return o1.toString().compareToIgnoreCase(o2.toString());
               }  //Compare
          };//Comparator
   public void buildWords(int i, int j, int direction, String words){
      int next_i=0; int next_j=0;
      switch (direction) {
                   case 1: // Up         
                      next_i = i - 1;
                      next_j = j;
                      break;
                   case 2: // Diagonal up right
                      next_i = i - 1;
                      next_j = j + 1;
                      break;
                     case 3: // Right
                        next_i = i;
                        next_j = j + 1;
                      break;
                   case 4: // Diagonal down right
                      next_i = i + 1;
                      next_j = j + 1;
                      break;
                   case 5: // Down
                      next_i = i + 1;
                      next_j = j;
                      break;
                     case 6: // Diagonal down left
                       next_i = i + 1;
                      next_j = j - 1;
                      break;
                   case 7: // Left
                      next_i = i;
                      next_j = j - 1;
                      break;
                   case 8: // Diagonal up left
                      next_i = i - 1;
                      next_j = j - 1;
                      break;
                }//switch
      if ((next_i >= 0 && next_i < this.size) &&
            (next_j >= 0 && next_j < this.size) ) {
                
            words = words + this.panel[j];
            System.out.println(words);
               }
                                 
                  if (words.length() >= 3) {
                     int contador =0; String aux = "";
                     for(int h = words.length()-1; h>=0; h--){
                        aux = aux + words.charAt(h);
                     }
                     for(int l=0 ; l<=aux.length()-1 ; l++){
                        if(aux . charAt(j) == words.charAt(j)){
                           contador++;
                        }
                     }
                     if(!this.list.contains(words) && contador == words.length()){
                        
                           this.list.add(words);
                     }
           }
   }
   public static void main(String[] args) {
      Scanner scan = new Scanner(System.in);
      //Declaracion de variables      
      //Test indica el numero de test.
      //Size indica la longitud del tablero
      //Chart es una matriz de caracteres
      //Words es un vector de la clase Crossword
      //Text almacena la cadena de caracteres introducida por consola
      int test; int size;  char[][] chart; Crossword[] words;
      ArrayList<String> words2;
      String text;
      //Leo los test que se quieren pasar
      System.out.println("Numero de test: ");
      test = scan.nextInt();
      
      words = new Crossword[test];
      int n=0;
      while(n<test){         
          System.out.println("Tamaño de tabla: ");         
          size = scan.nextInt();
            chart = new char[size][size];
                  for(int i = 0; i < chart.length; i++){
                     
                       text = scan.next();
         
                      for(int j = 0; j < text.length(); j++){
                         /**
                         * char charAt(int index)
                              * Devuelve el carácter indicado
                              * como índice. El primer carácter de la cadena será
                              * el del índice 0. Junto con el método .length() podemos
                              * recuperar todos los caracteres de la cadena de texto.
                         */
                            chart[j] = text.charAt(j);
               }//for interno                  
            }//for externo 1
                  if(test-1==n){
                     words[n]=new Crossword(size,chart);
                     for (int i = 0; i < size; i++){
                                    for (int j = 0; j < size; j++){
                                        // Las 8 direcciones de cada elemento
                                        for (int d = 1; d <= 8; d++){
                                           words[n].buildWords(i, j, d, "");                  
                                  }
                              }
                     }                                 
                  }else{
                     words[n]=new Crossword(size,chart);
                     for (int i = 0; i < size; i++){
                                    for (int j = 0; j < size; j++){
                                        // Las 8 direcciones de cada elemento
                                        for (int d = 1; d <= 8; d++){
                                           words[n].buildWords(i, j, d, "");                  
                                  }//for
                              }//for
                     }//for
                  }//else
               n++;
       }//while
      scan.close();
      words2 = new ArrayList<String>();
      int i =0;
      while ( i<words.length){
         words2 = words.getList();
         if(words.length-1==i){
            for(String word : words2){
               if(!word.isEmpty()){
                  System.out.println(word);
               }//if
            }//for each            
         }//if
         else{
            if(words.length-1!=i){
               for(String word : words2){
                  if(!word.isEmpty()){
                     System.out.println(word);
                  }//if
               }//for each
                System.out.println("");
            }//if
         }//else
         i++;
      }//while
   }//Main
   public ArrayList<String> getList() {
      int i=0;
      while ( i < this.list.size())
      Collections.sort(this.list, lexicographically);
      i++;
      return list;
   }//getList   
}//Crossword


En línea

NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Re: Duda sobre este ejercicio
« Respuesta #1 en: 18 Febrero 2014, 15:01 pm »

Crea otro tablero de las mismas dimensiones lleno de true. Cuando vayas a usar una casilla comprueba que está en true. Cuando la uses, cambiala a false.

Creo que es lo que pides.

Salud ;)


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda sobre el ejercicio del palindromo.
Programación C/C++
-esifu- 6 6,080 Último mensaje 14 Diciembre 2010, 19:16 pm
por Garfield07
duda sobre un ejercicio vb 6
Programación Visual Basic
juni85 4 2,857 Último mensaje 14 Enero 2011, 11:14 am
por juni85
consejo sobre el uso del Select Case en este ejercicio
Programación Visual Basic
lio crossroad 6 3,746 Último mensaje 21 Abril 2013, 22:48 pm
por lio crossroad
Duda en este ejercicio de diseño BD
Bases de Datos
Soulrata 0 1,906 Último mensaje 9 Octubre 2013, 13:27 pm
por Soulrata
DUDA SOBRE EJERCICIO
Java
hola777 1 2,016 Último mensaje 27 Noviembre 2013, 00:01 am
por Mitsu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines