我在类似于跳棋的游戏中使用alpha beta修剪进行游戏树搜索,但我确定了最佳移动的严格5秒限制。我希望我的递归在分配的时间到来之前进入基本情况。
如何查看我剩下多少时间,或者在我的时间差不多完成后更改布尔值?
答案 0 :(得分:0)
在每一步中,使用System.currentTimeMillis()
获取当前时间,并将其与递归开始前保存的时间进行比较。
答案 1 :(得分:0)
你可以创建一个新的线程来计算,并在5秒内更改一个布尔值,可以从其他地方检查。也许这样的事情?
Executors.newCachedThreadPool().execute(new Runnable() {
public void run() {
Thread.sleep(5000);
timeout = true;
}});
答案 2 :(得分:0)
有很多方法可以做到这一点。正如在其他帖子中建议的那样,您可以使用System.currentTimeMillis()
,并根据您通过递归调用传递的long startTime
变量进行检查,或者在执行时以某种方式对递归函数可用。 或你可以使用Runnable
或Callable
来翻转一个标志或在5000毫秒sleep()
之后运行回调,但我认为这可能有点过分。
上次我做了类似的事情,我使用了一个名为StopWatch
的{{3}},它提供了一个名为elapsedMillis()
的好方法,可以为您提供自您StopWatch
开始以来经过的毫秒数。这种方法最像System.currentTimeMillis()
,但需要的锅炉板略少。如果引入Guava作为依赖项不是一种选择,那么你总是可以自己实现一个类似的类,在任何情况下,它都会简单地使用System.currentTimeMillis()
。