2012-03-22 77 views
1

我在與跳棋類似的遊戲中進行alpha beta修剪的遊戲樹搜索,但在確定我的最佳舉措方面,我獲得了嚴格的5秒限制。我希望遞歸在分配時間到來之前輸入基本情況。在Java中,如何在一段時間後結束遞歸?

如何檢查我有多少時間離開,或者當我的時間差不多完成時更改布爾值?

+0

只是一個idea.Take一個靜態變量,並根據您的要求使用。 – 2012-03-22 09:56:33

+0

有沒有一個內置的java類,你會推薦用來跟蹤時間?你將如何實現它?此外,感謝您的回覆 – 2012-03-22 09:59:41

回答

0

在每個步驟中,使用System.currentTimeMillis()獲取當前時間,並將其與遞歸開始之前保存的時間進行比較。

0

你可以創建一個新的線程來計數,並在5秒鐘內改變一個可以從其他地方檢查的布爾值。這樣的事可能嗎?

Executors.newCachedThreadPool().execute(new Runnable() { 
        public void run() { 
          Thread.sleep(5000); 
          timeout = true; 
}}); 
+0

所以我會初始化超時爲false,在我開始取消之前運行此權利,然後檢查它是否屬於我的基本情況? – 2012-03-22 10:05:34

+0

你會工作的。另外@dldnh的解決方案也將工作我猜。 – Giannis 2012-03-22 10:07:15

+0

好的,謝謝你的男人! – 2012-03-22 10:13:06

0

有很多方法可以做到這一點。正如其他帖子中所建議的,您可以使用System.currentTimeMillis(),並根據您通過遞歸調用傳遞的long startTime變量進行檢查,或者在執行遞歸函數時以某種方式提供給它。 你可以使用RunnableCallable翻轉一個標誌或在5000ms後運行回調sleep(),但我認爲這可能是矯枉過正。

上次沒有這樣的事情,我使用了一種叫做StopWatchGuava class,它提供了一個名爲elapsedMillis()不錯的方法,讓你經過的毫秒數,因爲你開始你的StopWatch。這種方法最像System.currentTimeMillis(),但要求稍微少一點的鍋爐板。如果引入番石榴作爲依賴項不是一種選擇,那麼你總是可以自己實現一個類似的類,在任何情況下,它都可以簡單地使用System.currentTimeMillis()