public boolean generateProblems(Integer[] nums, int start) {
if (start == nums.length) {
return false;
}
for (int i = -range; i < range; i++) {
nums[start] = nums[start] + i;
System.out.println(printArray(nums));
Target game = new Target(nums, target);
if (game.solutionSize() == difficulty) {
if (!possibleGames.contains(game.getValues())) {
possibleGames.add(game.getValues());
}
return false;
}
if (generateProblems(nums, start + 1)) {
return true;
}
nums[start] = nums[start] - i;
}
return false;
}
概述:在遊戲中,24,你必須加,減,除和乘四個數字達到目標,24我已經叫了類似的,更抽象類目標,它採用一個整數數組並計數(並解決)解決方案以達到給定的目標值。實施和Java的固定遞歸方法
我有另一個名爲TargetGenerator的類,它需要一個「種子數組」,目標值,範圍以及請求的解決方案數量(難度)。它應該做的就是調用方法generateProblems,以獲得可能的遊戲列表,以便該組合僅包含難度解決方案。這些可能的遊戲由初始種子數組加上/減去範圍限制。 (範圍爲3的種子{2,3,4,5}從{-1,0,1,2}到(但不包括){5,6,7,8}。)
但是,我遇到的問題是我沒有血腥的想法,爲什麼這不起作用。打印在控制檯中試用的組合表明它啓動正常,但不能很好地結束。
隨着24 {6,2,3,12},目標的種子,以及一系列的3:
2 2 3 12
2 -2 3 12
2 -2 -1 12
2 -2 -1 8
2 -2 -1 9
2 -2 -1 10
A few more lines later is where it messes up...
2 1 1 12
2 1 1 13
2 1 2 10
2 1 2 6
2 1 2 7
2 1 3 7
....Few hundred more combinations later...
9 -1 -23 -46
9 -1 -23 -45
9 -1 -23 -44
9 -1 -23 -43
....And now I'm sad :(
在我看來,有一些錯誤,當它到達最終會發生什麼的「循環」(當start == nums.length)時,它會減去它不應該的時間。但是,我沒有調試知識來弄清楚什麼是錯的。
(我會給整個代碼,如果任何你想要的)
嘗試每次打印出的中間值和/或條件表達式的值,所以你可以看到,爲什麼節目製作意外的決定。這應該會告訴你在你的邏輯中的錯誤。然後,你需要做的就是弄清楚它應該做什麼,而不是在那個時候。 – keshlam