Ho creato un algoritmo che dovrebbe generare tutte le possibili permutazioni , o meglio genera la permutazione relativa a un dato intero (poi dal codice vedrete che non si tratta di intero ma per lavorare in range più ampi mi appoggio ai BigInteger) passatogli come parametro.
Il problema è che non vengono veramente generate tutte le possibili permutazioni , c'è qualcosa che non va a dovere ma non capisco cosa..innanzitutto vi posto il codice del relativo metodo:
codice:
public static String getPermutazione (char [] caratteri , BigInteger bi) {
int sistema = caratteri.length;
BigInteger bs = new BigInteger (sistema + "");
int potenza = 0;
sb = new StringBuilder ();
int resto;
BigInteger temp = bi;
while ((temp = bi.divide (bs.pow (potenza))).compareTo (BigInteger.ZERO) > 0) {
resto = temp.mod (bs).intValue ();
sb.append (caratteri [resto]);
potenza++;
}
return sb.reverse ().toString ();
}
Ma avviandolo , ad esempio così:
codice:
char [] c = "0123456789".toCharArray ();
BigInteger bic = BigInteger.ZERO;
while (true) {
System.out.println (getPermutazione (c , bic));
bic = bic.add (BigInteger.ONE);
Thread.sleep (100);
}
Senza aspettare neanche troppo tempo noto che mancano delle permutazioni:
manca 0 , manca tutta la serie 00 01 .. 09 , manca 000 001 ... 099
insomma mancano quelli in cui il primo carattere della permutazione sia il primo carattere dell'array passato come parametro al metodo..
Ora chiedo a voi , mi aiutate a capire dove sta l'errore?O meglio , penso di sapere dove sta l'errore ma come lo risolvo?