Ayuda con printf

Eric Draven
13 de Abril del 2006
Hola, buenas necesito ayuda para crear con el metodo printf una simulacion de las torres de hanoi para ello necesito formatear un String, que se que no se puede. Aqui adjunto el codigo para que se sepa mas o menos por donde van los tiros. Gracias
public class TorresHanoi {

private int movimientos=1;

private int n; //n�mero de discos

private String[] posteA;

private int a;

private int b;

private String[] posteB;

private int c;

private String[] posteC;

/**
* Inicializa los valores del objeto y establece el numero de
* discos
* @param n Numero de discos
*/
public TorresHanoi(int n) {
this.n=n;
String disco="*";
posteA=new String[n];
posteB=new String[n];
posteC=new String[n];
for(int i=n-1;i>=0;i--){
posteA[i]=disco;
posteB[i]=" ";
posteC[i]=" ";
disco+="*";
}
a=posteA.length;
b=0;
c=0;

}


/**
* Metodo que resuelve el juego de las Torres de Hanoi
* @param n Numero de discos
* @param a Poste en el que se empieza
* @param c Poste en el que se termina
* @param b Poste que sirve de pivote
*/
public void solucionRec(int n, int a, int c, int b) {
hanoi(n, a, c, b);
}


private void hanoi(int n, int a, int c, int b) {
if (n == 1) {
System.out.println("Movimiento: " + movimientos + " Mover disco "
+ n + " desde " + a + " hasta " + c);
moverDisco(a, c);
estado();

} else {
hanoi(n - 1, a, b, c);
System.out.println("Movimiento: " + movimientos + " Mover disco "
+ n + " desde " + a + " hasta " + c);
moverDisco(a, c);
estado();
hanoi(n - 1, b, c, a);
}
}


/**
* Muestra graficamente el estado de los postes y los discos
*/
public void estado() {
int cte=1;
for(int i=n-1;i>=0;i--){
//System.out.printf("\t"+posteA[i]+"%1$-1c"+posteA[i]+"\t"+posteB[i]+"%1$-1c"+posteB[i]+"\t"+posteC[i]+"%1$-1c"+posteC[i]+"\n",\'|\');
System.out.printf("\t%2$"+(n)+"c"+posteA[i]+"%1$-1c"+posteA[i]+"%2$-"+(n)+"c\t%2$"+(n)+"c"+posteB[i]+"%1$-1c"+posteB[i]+"%2$-"+(n)+"c\t%2$"+(n)+"c"+posteC[i]+"%1$-1c"+posteC[i]+"%2$-"+(n)+"c\t\n",\'|\',\' \');
cte++;
}
System.out.println("");
}

/**
* Mueve un disco de un poste a otro
* @param desde Poste de partida
* @param hasta Poste de llegada
*/
public void moverDisco(int desde, int hasta) {
switch (desde){
case 1:
if(hasta==2){
posteB[b]=posteA[a-1];
b++;
}
else{
posteC[c]=posteA[a-1];
c++;
}
posteA[a-1]=" ";
a--;
break;
case 2:
if(hasta==1){
posteA[a]=posteB[b-1];
a++;
}
else{
posteC[c]=posteB[b-1];
c++;
}
posteB[b-1]=" ";
b--;
break;
case 3:
if(hasta==1){
posteA[a]=posteC[c-1];
a++;
}
else{
posteB[b]=posteC[c-1];
b++;
}
posteC[c-1]=" ";
c--;
break;
}
movimientos++;
}
}