Я использую режим отладки в Eclipse Oxygen, чтобы, как вы могли догадаться, отладить мой код.
Я пишу алгоритм обратного отслеживания (рекурсивная функция - она сама себя вызывает).
В функции Backtrack есть цикл for, а в конце цикла for, если выполняются определенные условия, выполняется этот код: Backtrack(csp, index + 1, CopyCSP(currentSolution));
.
Я отлаживаю свой код и хочу перейти к следующей итерации цикла for, поэтому, когда я добираюсь до этой строки, я нажимаю «перешагнуть». Но он входит и проводит меня через следующую функцию Backtrack.
Я точно знаю, что это на самом деле следующая функция, потому что, как вы видите, переменная index
увеличивается на единицу, что произошло.
Почему это происходит? Как я могу избежать этого и на самом деле перешагнуть? Если шаг за шагом не делает то, что я хочу здесь, что я должен использовать?
Вот мой код для полной функции:
private void Backtrack(CSP csp, int index, CSP currentSolution) {
//BREAKPOINT IS HERE
if(index == csp.numVars) {
currentSolution.PrintSolution();
csp.PrintSolution(currentSolution);
solved = true;
return;
}
for(int test = 0; test < csp.MaxDomainSize(); test++) {
if(solved) {
return;
}
if(test < currentSolution.vars[index].domain.size) {
currentSolution.vars[index].value = currentSolution.vars[index].domain.get(test);
}
else {
continue;
}
boolean satisfied = true;
for(int i = 0; i < csp.constraints.size; i++) {
if(!csp.constraints.get(i).Satisfied(currentSolution.vars, index)) {
satisfied = false;
}
}
if(satisfied) {
System.out.println("Variable " + index + " satisfied by " + currentSolution.vars[index].value + ".");
Backtrack(csp, index + 1, CopyCSP(currentSolution));
}
}
}
Я положил комментарий, где точка останова.