0

我是java新手。我正在尝试在指数到达间隔时间(不是整数)收集动态事件。

但是我希望我的“计时器”值是双倍的,有没有其他方法可以让计时器类接受双倍的值?

我尝试使用 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

使用浮点数(float 和 double)而不是整数(int 和 long)是一个常见的错误。在您的场景中,应该使用 int 或 long 来测量时间间隔,例如毫秒。

于 2012-07-03T11:16:16.897 回答