2014-02-06 53 views
2
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)時,它會減去它不應該的時間。但是,我沒有調試知識來弄清楚什麼是錯的。

(我會給整個代碼,如果任何你想要的)

+0

嘗試每次打印出的中間值和/或條件表達式的值,所以你可以看到,爲什麼節目製作意外的決定。這應該會告訴你在你的邏輯中的錯誤。然後,你需要做的就是弄清楚它應該做什麼,而不是在那個時候。 – keshlam

回答

1

我希望這已經是不相關的,而你解決它通過你的自我,但如果不是在這裏我發現了什麼不對您的功能。據我所知,如果你能達到你的目標數字,你只需要檢查給定範圍內的所有可能的組合。如果是這樣,你不必從你的generateProblems中返回任何東西(你可以,但是你這樣做只會增加複雜性),你只需要檢查你的所有組合。這是你如何能做到這一點:

public void generateProblems(Integer[] nums, int start) 
{ 

    if (start != nums.length) 
    { 
     for (int i = -range; i < range; i++) 
     { 
      nums[start] = nums[start] + i; 

      action(nums); 
      generateProblems(nums, start + 1);   

      nums[start] = nums[start] - i; 
     } 
    } 
} 

action(nums);裏面去你的邏輯

+0

非常感謝!這就像檢查所有可能性的魅力一樣。但是,我現在遇到了我的解決方案列表中一個非常奇怪的問題。儘管準確地確定了正確的值,但當我將它添加到我的列表中時,它只會列出原始數字。例如,種子{5,4,3,8}只能打印出{5,4,3,8}作爲解決方案,即使打印出的字符串添加到列表中時,它也會打印出正確的數字! – Mike