Ti propongo un esempio di impostazione che ho pensato per il tuo problema; si tratta soprattutto di una alternativa allo spezzone di codice che hai proposto.
Ti resta solo pensare come generare le combinazioni.
codice:
/**
* @(#)MainComb.java
*
*
* @author Vincenzo
* @version 1.00 2010/11/15
*/
public class MainComb {
private final Integer NUM_DEC = 10;
private Integer bottom;
private Integer up;
private boolean escludiCombConZeroNonSign;
private int totaleCombinazioni;
private int combinazioni[];
public MainComb(Integer bottom, Integer up, boolean escludi){
this.bottom = bottom;
this.up = up;
escludiCombConZeroNonSign = escludi;
totaleCombinazioni = getTotal();
combinazioni = new int[totaleCombinazioni - 1];
}
/*
* D(n, k) = n(n-1) .. (n-k+1)
*/
private int getNumCombSenzaRip(){
int ret, i, last;
last = NUM_DEC - bottom.toString().length() + 1;
ret = i = NUM_DEC;
while(i > last){
ret *= --i;
}
if(escludiCombConZeroNonSign)
ret -= ret / NUM_DEC;
return ret;
}
/*
* Le combinazioni di interi sono limitate
* ad un intervallo.
* Es: 1023 <= x < 9876, dove x è una combinazione di interi
*/
private int getTotal(){
int numComb = getNumCombSenzaRip();
int maxDec = 9;
int maxComb = Integer.valueOf(up.toString().substring(0, 1));
while( maxDec > maxComb){
numComb -= NUM_DEC-1;
maxDec--;
}
return numComb;
}
public int getTotaleCombinazioni(){
return this.totaleCombinazioni;
}
@Override
public String toString(){
return "[" + bottom + ", " + up + "[";
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Integer bottom = new Integer(1023);
Integer up = new Integer(9876);
MainComb mc = new MainComb(bottom, up, true);
System.out.println(mc.toString());
System.out.println("Totale disposizioni: " + mc.getTotaleCombinazioni());
bottom = new Integer(10);
up = new Integer(29);
mc = new MainComb(bottom, up, true);
System.out.println(mc.toString());
System.out.println("Totale disposizioni: " + mc.getTotaleCombinazioni());
}
}