는 (무료 라이센스)를 동적으로 자바 중첩 루프를 만들고, 다음과 같은 코드가 있었다 :시뮬레이션 중첩 루프 초보자의 프로그래밍 책에서
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'변수가 '1'이 될 '0'이됩니까?-> 내 디버거 (Eclipse 내장)에서 [1,3]을 인쇄 한 후 포인터가 'nestedLoops'메서드의 '}'중괄호 (값 1 인 'currentLoop')로 이동합니다. , 그리고 나서 갑자기 for 루프를 'currentLoop'= 0으로 실행하기 시작합니다. 변수는 어디에서 값 '0'을 가져 옵니까? 왜 메소드의 마지막 중괄호로 이동 한 후 메서드 이름을 호출하지 않고 'for 루프'를 실행하기 시작합니까?
이것은 여러분 중 일부에게는 매우 쉬운 질문 일 수 있습니다. 나는 초보자에 불과하다. 당신의 도움에 미리 감사드립니다.
부수적으로 말하자면, 이것은 매우 끔찍한 코드입니다. 생산 세계에서 이와 같은 것을 보지 못할 것입니다. 그것은 끔찍한 일이다. –
그래도 나는 그것이 어떻게 작동하는지보기에 꽤 교육적인 것이라고 생각합니다. – Imagist
@imagist 예, 그걸로 갈 것입니다. 그들이이 물건에 착수 할 때 마음을 굽히는 것이 좋습니다. 어떤 개발자는 이런 종류의 프로그래밍을 피하는 법을 배우지 않는 것이 더 낫습니다. "컴파일하고 실행하면 괜찮습니다!" 시간이 지남에 따라 디버그하고 유지 보수하는 코드의 복잡성에 대해 어떠한 생각도하지 마십시오. –