In a beginner's programming book (free licence) there was the following code, dynamically creating nested loops in 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();
}
}
i
When inputting N=2 and K=3, on the screen should be printed something like [1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3] (with newlines, etc). The program works fine. Then I tried to debug it and spent a quite some time trying to understand how exactly it works. I couldn't. My question:
----> why after printing [1,3] the variable 'curentLoop' becomes '0' being beforehand '1' ?
Also: -> In my debugger (Eclipse built-in) after printing [1,3] the pointer goes to the end '}' brace of the method 'nestedLoops' (with 'currentLoop' with value 1), and then suddenly it starts executing the for-loop with 'currentLoop' = 0. Where does the variable take its value '0' from? Why after going to the end brace of the method, it starts executing the 'for loop', without any call to the method's name?
This could be a very easy question to some of you; I'm just a beginner. Thank you in advance for your help.