0

私はJavaが初めてです。指数関数的な到着間隔 (整数ではない) で動的イベントを収集しようとしています。

しかし、「タイマー」の値を2倍にしたいのですが、タイマークラスが2倍の値を受け入れるようにする代替手段はありますか?

以下のように Timer ActionListerner を使用してみました。

double timer = data.getInterArrivalTime(0.5);
    timer1 = new Timer(timer, new DataCollection());
    timer1.start();

私の DataCollection クラスは次のとおりです。

private class DataCollection implements ActionListener
{
    public void actionPerformed(ActionEvent e)
        {

        int eventValue =  data.poisson(25);
        valueListAtOrigin.addLast(eventValue);
        time = time + timer;
        timeListAtOrigin.addLast(time); 

        }
}
4

2 に答える 2

2

タイマーは、せいぜいミリ秒単位までしか正確ではありません。ミリ秒単位で設定できたとしても、実際にはこのようには機能しません。

long最も簡単な方法は、キャストを使用して時間を最も近いものに丸めることです。

timer1 = new Timer((long) timer, new DataCollection());

ところで、あなたの興味のために、 Object.wait(long millis, int nanos) のコードは

public final void wait(long timeout, int nanos) throws InterruptedException {
    if (timeout < 0) {
        throw new IllegalArgumentException("timeout value is negative");
    }

    if (nanos < 0 || nanos > 999999) {
        throw new IllegalArgumentException(
            "nanosecond timeout value out of range");
    }

if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
    timeout++;
}

wait(timeout);
}
于 2012-07-03T11:08:27.287 に答える
0

整数(intとlong)の代わりに浮動小数点数(floatとdouble)を使用するのはよくある間違いです。シナリオでは、時間間隔はintまたはlong(ミリ秒など)を使用して測定する必要があります。

于 2012-07-03T11:16:16.897 に答える