O código abaixo cria uma permutação de strings onde o usuário entrega o número de palavras e quais palavras são as que vão compor a lista.
Feito isso a linha (System.out.print(teste[j]); ) no método main imprime na tela o anagrama de palavras separado por espaços.
Eu gostaria de acrescentar um Scanner para captar outra palavra que será colocada sempre no início e no fim de cada variação. No momento é assim:
Entrada tamanho lista: 3
Palavra 1: a
Palavra 2: b
Palavra 3: c
Saída:
c b a
c a b
b c a
a c b
b a c
a b c
Eu gostaria que a saída fosse com uma outra palavra D da seguinte forma:
D c b a D,
D c a b D,
D b c a D,
D a c b D,
D b a c D,
D a b c D
Depois eu vou tentar escrever num arquivo txt assim:
D c b a D,D c a b D,D b c a D,D a c b D,D b a c D,D a b c D
Alguém pode ajudar?
import java.util.Scanner;
import java.util.ArrayList;
public class Permutacao {
public static void main(String[] args) {
Scanner leitura = new Scanner(System.in);
System.out.println("Digite o numero de palavras: ");
int lex = leitura.nextInt();
ArrayList lista = new ArrayList();
int z;
Scanner www = new Scanner(System.in);
for (z = 0; z < lex; z++) {
System.out.print("Digite e palavra: ");
String aaa = www.nextLine();
lista.add(aaa);
}
ArrayList lpermutada = permuta(lista);
for (int i = 0;i < lpermutada.size();i++){
String[] teste = (String[])lpermutada.get(i);
System.out.print("\n");
for(int j =0 ;j < teste.length;j++){
System.out.print(teste[j] + ",");
}
}
System.exit(0);
}
private static int fatorial(int num){
int valor = 1;
for (int i = 1;i <= num;i++){
valor = valor*i;
}
return valor;
}
private static ArrayList permuta(ArrayList lista){
ArrayList lperm = new ArrayList();
ArrayList permutacoes = new ArrayList();
int n = lista.size();
int nrPerm = fatorial(n);
int vaux[] = new int[n-1];
int posBco[] = new int[n-1];
for(int i = 0;i < n - 1;i++){
vaux[i] = fatorial(n - 1 - i);
}
for(int k = 0;k < nrPerm;k++){
for(int i = 0;i < n - 1;i++){
posBco[i] = 0;
}
int soma_k = k;
int multiplicando = n - 1;
int indice = 0;
while(soma_k > 0){
int multiplicacao = vaux[indice]*multiplicando;
if(multiplicacao <= soma_k){
soma_k = soma_k-multiplicacao;
posBco[indice] = multiplicando;
multiplicando = n - 1;
indice++;
}else{
multiplicando--;
if(multiplicando == 0){
indice++;
multiplicando = n - 1;
}
}
}
lperm.add(posBco.clone());
}
//inicia a permutação
for(int k = 0;k < lperm.size();k++){
int indice = n - 1;
int[]posicoes = (int[])lperm.get(k);
String [] individuo = new String[n];
for(int i = 0;i < n;i++){
individuo[i] = "";
}
int id = 0;
for(int i = 0;i < posicoes.length;i++){
int posicao = posicoes[i];
int vazio = 0;
while(vazio < posicao){
if(individuo[id].equals("")){
vazio++;
}
id++;
}
while(individuo[id].equals("") == false){
id++;
}
individuo[id] = (String)lista.get(indice);
id = 0;
while(individuo[id].equals("") == false){
id++;
}
indice--;
}
//último
for(int i = 0;i < individuo.length;i++){
if(individuo[i].equals("")){
individuo[i] = (String)lista.get(0);
}
}
permutacoes.add(individuo.clone());
}
return permutacoes;
}
}