チェッカーに似たゲームでアルファベットプルーニングを使ってゲームツリーを検索していますが、私は自分の最善の動きを判断するのに5秒の制限を厳守しています。割り当てられた時間が上がる直前に、私の再帰がベースケースに入ることを希望します。Javaで一定時間後に再帰を終了するにはどうすればよいですか?
残った時間を確認するにはどうすればよいですか、時間が近づいたらブール値を変更するにはどうすればよいですか?
チェッカーに似たゲームでアルファベットプルーニングを使ってゲームツリーを検索していますが、私は自分の最善の動きを判断するのに5秒の制限を厳守しています。割り当てられた時間が上がる直前に、私の再帰がベースケースに入ることを希望します。Javaで一定時間後に再帰を終了するにはどうすればよいですか?
残った時間を確認するにはどうすればよいですか、時間が近づいたらブール値を変更するにはどうすればよいですか?
各ステップでは、System.currentTimeMillis()
を使用して現在時刻を取得し、再帰開始前に保存した時刻と比較します。
5秒間にカウントされる新しいスレッドを作成して、別の場所からチェックできるブール値を変更できます。おそらくそれは何か?
Executors.newCachedThreadPool().execute(new Runnable() {
public void run() {
Thread.sleep(5000);
timeout = true;
}});
私はタイムアウトをfalseに初期化するでしょう、私は私の取り消しを開始する前にこの権利を実行し、それが私の基本ケースに当てはまるかどうかを確認しますか? –
そうでしょう。また、@ dldnhの解決策も私が推測することができます。 – Giannis
okありがとう! –
これを行うにはいくつかの方法があります。他の投稿で示唆されているように、System.currentTimeMillis()
を使用して、再帰呼び出しで渡す変数long startTime
と照合するか、実行時に再帰関数で何らかの形で利用できるようにしてください。あなたはフラグを反転または5000ms sleep()
後にコールバックを実行するためにRunnable
またはCallable
を使用することができますが、私はそれはやり過ぎかもしれないと思うまたは。
前回私ははこのような何かをした、私はあなたがあなたのStopWatch
を始めてからあなたの経過ミリ秒数を示しますelapsedMillis()
と呼ばれる素敵な方法を提供しStopWatch
と呼ばれるGuava classを、使用していました。このアプローチは、System.currentTimeMillis()
に最も似ていますが、わずかに少ないボイラープレートが必要です。 Guavaを依存関係として導入することはオプションではない場合は、自分自身で同様のクラスを実装することができます。いずれの場合でも、フードの下では単にSystem.currentTimeMillis()
を使用します。
ちょうどアイデアです。静的変数を作成し、要件に応じて使用してください。 –
時間を追跡するために使用することをお勧めする組み込みJavaクラスはありますか?あなたはそれをどのように実装しますか?また、返信ありがとう –