2011-11-14 2 views
0

私は、その例外がスローウォッチのように扱い、タイマーを停止し、与えられた問題を解決するのにかかった時間を表示する方法があれば、完了時に簡単な例外をスローするプログラムを持っています。Javaの1秒間(分数(ただし小さい))の時間を決定する(解を見つける)?

ありがとうございます!

+0

System.currentTimeMillis()を見てください。あなたが始まったときに一度それを呼んだり、一度停止したり引いたりしてください。 – user949300

答えて

1

ミリ秒

System.currentTimeMillis()はミリ秒単位で現在の時刻を返す関数です。この関数は、開始時に1回呼び出すことができます。終了したらもう一度呼び出すと、経過時間を判断することができます。例えば

public void foo() { 
    long startTime = System.currentTimeMillis(); 

    try { 
     doStuff(); 
    } catch (Exception e) { 
     long endTime = System.currentTimeMillis(); 
     long elapsedTime = endTime - startTime; 
     System.out.println("This operation took " + elapsedTime + " milliseconds."); 
    } 
} 

ナノ秒

また、(むしろミリ秒よりも)ナノ秒まで正確であるSystem.nanoTime()を使用することができますが、それはどのくらいそれができるの違いの中に、より限定されています描く

+0

これは完全に完全に機能しました。私は本当に助けに感謝します!私はbyによって私の解決のためにnanoTimeを使用して終了しました。 – HunderingThooves

+0

注:(a)あなたのコンピュータの時計は、nanoTimeを呼び出してもナノ秒を捕捉するのに十分なほど細かいものではないかもしれません。したがって、結果はさまざまなコンピュータによって異なる場合があります。 (b)ナノ秒(通常の間違い)には 'int'ではなく' long'を使用してください。 –

+0

'nanoTime'への呼び出しについては、[この質問と回答](http://stackoverflow.com/q/510462/642706)を参照してください。 –

0

最も簡単な場合は、System.currentTimeMillis()を使用して、開始時刻と終了時刻を記録します(catchブロックのstopからstartを引く)。きれいなインタフェースでは、より複雑なアプローチがあります。例えば、以下を参照してください。

だけ例外がキャッチされるたびにタイマーがスコープ内にあることを確認してください。

0

例外処理は、フロー制御の特に貧弱な方法です。ループ内でbreakよりはるかによく、ループ条件をfalseに設定するか、再帰メソッドから復帰してください。

あなたの実際の質問については、プログラムの開始時にSystem.currentTimeMillis()でシステム時間を取得し、最後にもう一度比較して比較することができます。システムコールは15msの精度しかないので、これは長時間実行しているプログラムには本当に便利です。

関連する問題