Ciao, sto realizzando un programma che, data una parola, ne scriva tutti gli anagrammi possibili (anche la parola stessa). Devo utilizzare un metodo ricorsivo ed è la prima volta che ne realizzo uno, quindi sono un po' in difficoltà.
Ho due problemi: il primo è che il programma mi stampa un numero di anagrammi a caso, il secondo è che non ho la più pallida idea di come fargli fare tutti gli anagrammi che servono! Qualcuno può darmi una mano?
import java.util.ArrayList;
import java.util.List;
public class AnagrammiModel {
private char[] arrayChar ;
private List<String> anagrammi = new ArrayList<String>();
public AnagrammiModel(String parola) {
//modifico la parola in un array di char
arrayChar = parola.toCharArray();
//aggiungo la parola alla lista degli anagrammi
anagrammi.add(parola);
int livello = 1;
//for(int i = 0; i < fatt(parola.length()); i++) per fargli scrivere n! anagrammi, ma non dà il risultato voluto
generaAnagramma(arrayChar, livello, 0);
}
private void generaAnagramma(char[] arrayChar, int livello, int letteraDaCuiPartire) { //questo è il mio metodo ricorsivo
if(livello == arrayChar.length) {
System.out.println(anagrammi);
return ;
}
for( int i = letteraDaCuiPartire; i < livello; i++ ) {
if(livello < arrayChar.length-1)
arrayChar = cambiaOrdine(i, livello+1);
if(isNew(arrayChar)) {
String anagramma = "";
for(int j = 0; j < arrayChar.length; j++)
anagramma += arrayChar[j];
anagrammi.add(anagramma);
}
generaAnagramma(arrayChar, livello+1, letteraDaCuiPartire+1);
}
}
//controlla se ho già scritto quell'anagramma
private boolean isNew(char[] arrayChar) {
String anagramma = "";
for(int j = 0; j < arrayChar.length; j++)
anagramma += arrayChar[j];
if(!anagrammi.contains(anagramma))
return true;
return false;
}
private char[] cambiaOrdine(int c, int d) {
char temp = arrayChar[c];
arrayChar[c] = arrayChar[d];
arrayChar[d] = temp;
return arrayChar;
}
//metodo che realizza il fattoriale
private int fatt(int length) {
int fatt = 1;
for(int i = 1; i <= length; i++)
fatt = fatt*i;
return fatt;
}
}
public class TestAnagramma {
public static void main(String[] args) {
// TODO Auto-generated method stub
AnagrammiModel am = new AnagrammiModel("ciao");
}
}
Se passo con il main "ciao" mi fa 2 anagrammi, se passo "eat" me ne fa 1