Tak. Można tego dokonać za pomocą programowania rekurencyjnego.
Zakładam, że nie lubisz zapisywać tych zagnieżdżonych forów w kodzie źródłowym - tak jak w twoim przykładzie, ponieważ jest to naprawdę brzydkie programowanie - jak wyjaśniają komentatorzy.
Poniższy (pseudo podobny do Javy) kod ilustruje to. Zakładam stałą głębokość dla zagnieżdżenia. W takim razie lubisz pętle nad wektorem całkowitym o wymiarach.
int[] length = new int[depth];
int[] counters = new int[depth];
Tablica counters
musi być zainicjowany 0 (Arrays.fill(counters,0)
). Macierz musi być zainicjalizowana do liczby iteracji dla odpowiedniej pętli for.
Zakładam, że chcesz wykonać pewną operację w wewnętrznej pętli. Będę to nazwać performOperation(int[] counters);
- zależy to od wielowymiarowego licznika, tj. Liczników zewnętrznych forów.
Następnie można uruchomić zagnieżdżone pętle wywołując
nestedLoopOperation(counters, length, 0);
gdzie
void nestedLoopOperation(int[] counters, int[] length, int level) {
if(level == counters.length) performOperation(counters);
else {
for (counters[level] = 0; counters[level] < length[level]; counters[level]++) {
nestedLoopOperation(counters, length, level + 1);
}
}
}
W twoim przypadku Twój System.out.println() byłoby
performOperation(int[] counters) {
String counterAsString = "";
for (int level = 0; level < counters.length; level++) {
counterAsString = counterAsString + counters[level];
if (level < counters.length - 1) counterAsString = counterAsString + ",";
}
System.out.println(counterAsString);
}
Proszę, nie. Nie rób tego. –
Po prostu stwórz metodę i pozwól, by zadzwonił 15 razy. To jest prawdziwa metoda rekurencyjna. – BalusC
@SotiriosDelimanoljest wyjaśnienie, dlaczego? ;-) –