Permutar palavras e imprimir permutações entre duas palavras

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;
	}
}

No método main, abaixo da linha:

ArrayList lpermutada = permuta(lista);

Modifique para isso aqui:

public static void main(String... args) {
  /* resto do seu código */

  System.out.print("Digite a palavra que ficará no inicio e no final: ");
  String palavra = www.nextLine();

  for (int i = 0;i < lpermutada.size();i++){
    String[] teste = (String[])lpermutada.get(i);
    System.out.print("\n" + palavra + ",");

    for(int j =0 ;j < teste.length;j++)
      System.out.print(teste[j] + ",");

      System.out.print(palavra);
      if ( i < lpermutada.size() - 1 ) System.out.print(",");
  }
}

Agradecido.

1 curtida