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