В книге программирования для начинающих (бесплатная лицензия) был следующий код, динамически создающий вложенные циклы в Java:
import java.util.Scanner;
public class RecursiveNestedLoops {
public static int numberOfLoops;
public static int numberOfIterations;
public static int[] loops;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("N = ");
numberOfLoops = input.nextInt();
System.out.print("K = ");
numberOfIterations = input.nextInt();
input.close();
loops = new int[numberOfLoops];
nestedLoops(0);
}
public static void nestedLoops(int currentLoop) {
if (currentLoop == numberOfLoops) {
printLoops();
return;
}
for (int counter=1;counter <= numberOfIterations;counter++) {
loops[currentLoop] = counter;
nestedLoops(currentLoop + 1);
}
}
public static void printLoops() {
for (int i = 0; i < numberOfLoops; i++) {
System.out.printf("%d ", loops[i]);
}
System.out.println();
}
}
я
При вводе N = 2 и K = 3 на экране должно быть напечатано что-то вроде [1,1], [1,2], [1,3], [2,1], [2,2] , [2,3], [3,1], [3,2], [3,3] (с переводом строки и т. Д.). Программа работает отлично.
Затем я попытался отладить его и потратил довольно много времени, пытаясь понять, как именно это работает. Я не мог Мой вопрос:
----> почему после печати [1,3] переменная 'curentLoop' становится '0', а предварительно '1'?
Также:
-> В моем отладчике (встроенном в Eclipse) после печати [1,3] указатель доходит до конца скобки '}' метода 'nestedLoops' (со значением 'currentLoop' со значением 1), а затем внезапно начинает выполняться цикл for с 'currentLoop' = 0. Откуда переменная берет свое значение '0'? Почему после перехода к конечной скобке метода он начинает выполнять цикл for без какого-либо вызова имени метода?
Это может быть очень простой вопрос для некоторых из вас; Я просто новичок. Спасибо заранее за вашу помощь.