Permutaciones de cadenas en Java (no recursivas)

Soy un estudiante de secundaria del grado 10 que trata de resolver algunos problemas en un libro de Estructuras de datos y algoritmos en Java.

Una de las preguntas es imprimir todas las permutaciones de una cadena.

class C14
{
public static void main(char a[])
{
    // char[] a = {'c','a','r','b','o','n'};
    int c=0,w=0;
    for(int q = 0;q<a.length;q++) 
    {
        for(int i=0;i<a.length;i++)
        {
            for(int j=1;j<a.length;j++)
            {
                for(int k=1;k<a.length-1;k++) 
                {
                    for(int z=0;z<a.length;z++)
                    {
                        System.out.print(a[z]);
                        c++;
                    }
                    w++;
                    System.out.println();
                    char p=a[k+1];
                    a[k+1]=a[k];
                    a[k]=p;
                }
                System.out.println();
            }
            System.out.println();
            char x=a[0];
            a[0]=a[1];
            a[1]=x;
        }
      }
    System.out.println(" Character count = " + c);
    System.out.println(" Word count = " + w);
    }
}

Este es mi intento. El libro me pide que lo haga para los caracteres 'c', 'a', 'r', 'b', 'o', 'n'. Mi solución hace precisamente eso, pero cuando trato de usar palabras de 3 o 4 letras, me da repeticiones. Si elimino el bucle más exterior e intento imprimirlo, funciona para palabras de 3 y 4 letras, pero no para palabras de más de 5 letras.

Estaré encantado de aclarar mi razonamiento al respecto, sé que no es el más eficiente, pero tenga en cuenta el hecho de que solo estoy en el grado 10 y esto es lo que me vino a la mente primero.

¿Alguien puede ayudarme, o al menos sugerir lo que está mal? Por favor, no recomiende una solución recursiva, porque primero quiero trabajarla de manera iterativa. Gracias, Sumit.

Respuestas a la pregunta(1)

Su respuesta a la pregunta