2012-03-22 9 views
1

チェッカーに似たゲームでアルファベットプルーニングを使ってゲームツリーを検索していますが、私は自分の最善の動きを判断するのに5秒の制限を厳守しています。割り当てられた時間が上がる直前に、私の再帰がベースケースに入ることを希望します。Javaで一定時間後に再帰を終了するにはどうすればよいですか?

残った時間を確認するにはどうすればよいですか、時間が近づいたらブール値を変更するにはどうすればよいですか?

+0

ちょうどアイデアです。静的変数を作成し、要件に応じて使用してください。 –

+0

時間を追跡するために使用することをお勧めする組み込みJavaクラスはありますか?あなたはそれをどのように実装しますか?また、返信ありがとう –

答えて

0

各ステップでは、System.currentTimeMillis()を使用して現在時刻を取得し、再帰開始前に保存した時刻と比較します。

0

5秒間にカウントされる新しいスレッドを作成して、別の場所からチェックできるブール値を変更できます。おそらくそれは何か?

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

私はタイムアウトをfalseに初期化するでしょう、私は私の取り消しを開始する前にこの権利を実行し、それが私の基本ケースに当てはまるかどうかを確認しますか? –

+0

そうでしょう。また、@ dldnhの解決策も私が推測することができます。 – Giannis

+0

okありがとう! –

0

これを行うにはいくつかの方法があります。他の投稿で示唆されているように、System.currentTimeMillis()を使用して、再帰呼び出しで渡す変数long startTimeと照合するか、実行時に再帰関数で何らかの形で利用できるようにしてください。あなたはフラグを反転または5000ms sleep()後にコールバックを実行するためにRunnableまたはCallableを使用することができますが、私はそれはやり過ぎかもしれないと思うまたは

前回私ははこのような何かをした、私はあなたがあなたのStopWatchを始めてからあなたの経過ミリ秒数を示しますelapsedMillis()と呼ばれる素敵な方法を提供しStopWatchと呼ばれるGuava classを、使用していました。このアプローチは、System.currentTimeMillis()に最も似ていますが、わずかに少ないボイラープレートが必要です。 Guavaを依存関係として導入することはオプションではない場合は、自分自身で同様のクラスを実装することができます。いずれの場合でも、フードの下では単にSystem.currentTimeMillis()を使用します。

関連する問題