2010-12-12 5 views
3

タイマJavaコードが動作しないタイマコードが機能しない

public interface IncDec 
{ 
void increment(); 
void decrement(); 
} 
public class MyIncDec implements IncDec 
{ 
private int x; 
public MyIncDec(int x) { 
    this.x = x; 
} 
public void increment() { 
    this.x++; 
} 
public void decrement() { 
    this.x--; 
} 
} 

パート1:( ミリ秒)かかる方法をインクリメントとデクリメント方法の各呼び出し長い測定するために使用することができるクラスを実装しこの情報を印刷します。クラスは、IncDecインターフェースの既存のクライアントと多かれ少なかれ透過的に適合しなければならない。

マイソリューション:

public class Test{ 
public static void main(String[] args){ 
MyIncDec mid = new MyIncDec(4); 
long l1; 
long l2; 

l1 = Calendar.getInstance().getTimeInMillis(); 
mid.increment(); 
l2 = Calendar.getInstance().getTimeInMillis(); 
System.out.println(l2-l1); 
} 
} 

私の解決策は、私は「増分」を呼び出した後のnの前に長い値を表示すると、彼らが同じである0と私の時間の差分を与えます。なぜそうなのか?

アプリケーションの多くの場所で同様の方法(メソッド呼び出しのタイミング)が必要だったとします。 1つのアイデアは、すべての異なるメソッドに対して別々のタイマークラスを書くことです。誰かがタイミングをより便利にするための別の最適化されたアイデアを持っていますか?

+2

なぜメソッド呼び出しがミリ秒で終了すると思いますか? 'System.nanoTime'はより正確ですが、正確ではありません。 –

+0

+1:宿題にどのように質問するべきかの優れた例です! :) –

+2

あなたは今までのあなたの質問の答えを受け入れていない。あなたはここで新しいので、おそらくあなたはこの意味が分かりません。 FAQは次のように述べています。どの答えが最も役立つかを決めたら、答えの左側にあるチェックボックスの輪郭をクリックして、それを受け入れられた回答としてマークします。これにより、あなたはあなたの質問に対する良い答えを受け取ったことを他の人に知らせることができます。そうすることは、あなたがコミュニティから価値を得ている他の人々を示しているので役立ちます。 (あなたがこれをしないと、人々は丁寧にあなたに戻ってあなたの質問の多くの答えを受け入れるよう頼むでしょう!) – oezi

答えて

1

まず、実行には1ミリ秒未満の時間がかかるため、時間差は0です。 incrementメソッドにThread.sleep(50)を追加して、何か変わるかどうか確認してください。

public void increment() { 
    try { Thread.sleep(50); } catch (InterruptedException e) { } 
    this.x++; 
} 

第二に、あなたの宿題は、おそらくあなたの時間を計算するクラスでIncDecインターフェイスを使用したいと考えています。だからそれを考慮に入れてください。どんなインタフェースが使用されているのか、より重要なことは、の使用方法を学びます

幸運を祈る!

-1
  1. 私はあなたのコードが動作すると信じています。あなたは現代のコンピュータに感謝する必要があります:彼らは非常に高速です。 mid.increment()の単一コールではなく、差分書き込みループ0..1000000を見たい場合。あるいは、ナノ秒単位のmesure時間。
  2. 練習ではありませんが、実際のタスクではJavaプロファイラを使用してください。多くの無料の商用プロファイラーがあります。このツールは、あなたに最高の情報を提供します。
1

私はあなたがProxy Pattern

の使用は、私はあなたに完全なソリューションを提供するつもりはない作る宿題が示唆されたと思いますが、ここでのヒントです:

public class MyIncDecProxy implements IncDec{ 

    MyIncDec incDec; 

    public MyIncDecProxy(int x){ 
     //Initialise incDec 
    } 

    public void increment() { 
     // Wrap the method of incDec implementing your timer 
    } 

    public void decrement() { 
     //ditto 
    } 

} 

あなたはその後、使用しますMyIncDecではなくMyIncDecProxyクラス

関連する問題