我在與跳棋類似的遊戲中進行alpha beta修剪的遊戲樹搜索,但在確定我的最佳舉措方面,我獲得了嚴格的5秒限制。我希望遞歸在分配時間到來之前輸入基本情況。在Java中,如何在一段時間後結束遞歸?
如何檢查我有多少時間離開,或者當我的時間差不多完成時更改布爾值?
我在與跳棋類似的遊戲中進行alpha beta修剪的遊戲樹搜索,但在確定我的最佳舉措方面,我獲得了嚴格的5秒限制。我希望遞歸在分配時間到來之前輸入基本情況。在Java中,如何在一段時間後結束遞歸?
如何檢查我有多少時間離開,或者當我的時間差不多完成時更改布爾值?
在每個步驟中,使用System.currentTimeMillis()
獲取當前時間,並將其與遞歸開始之前保存的時間進行比較。
你可以創建一個新的線程來計數,並在5秒鐘內改變一個可以從其他地方檢查的布爾值。這樣的事可能嗎?
Executors.newCachedThreadPool().execute(new Runnable() {
public void run() {
Thread.sleep(5000);
timeout = true;
}});
所以我會初始化超時爲false,在我開始取消之前運行此權利,然後檢查它是否屬於我的基本情況? – 2012-03-22 10:05:34
你會工作的。另外@dldnh的解決方案也將工作我猜。 – Giannis 2012-03-22 10:07:15
好的,謝謝你的男人! – 2012-03-22 10:13:06
有很多方法可以做到這一點。正如其他帖子中所建議的,您可以使用System.currentTimeMillis()
,並根據您通過遞歸調用傳遞的long startTime
變量進行檢查,或者在執行遞歸函數時以某種方式提供給它。 或你可以使用Runnable
或Callable
翻轉一個標誌或在5000ms後運行回調sleep()
,但我認爲這可能是矯枉過正。
上次我沒有這樣的事情,我使用了一種叫做StopWatch
Guava class,它提供了一個名爲elapsedMillis()
不錯的方法,讓你經過的毫秒數,因爲你開始你的StopWatch
。這種方法最像System.currentTimeMillis()
,但要求稍微少一點的鍋爐板。如果引入番石榴作爲依賴項不是一種選擇,那麼你總是可以自己實現一個類似的類,在任何情況下,它都可以簡單地使用System.currentTimeMillis()
。
只是一個idea.Take一個靜態變量,並根據您的要求使用。 – 2012-03-22 09:56:33
有沒有一個內置的java類,你會推薦用來跟蹤時間?你將如何實現它?此外,感謝您的回覆 – 2012-03-22 09:59:41