我是java的新手。我试图在指数到达间隔时间(非整数)收集动态事件。
但我想要我的计时器'值为double,有没有替代方法让Timer Class接受双倍的值?
我尝试使用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);
}
}
答案 0 :(得分:2)
计时器最多只精确到最接近的毫秒。即使你可以设置一毫秒的分数,它也不会以这种方式工作。
最简单的方法是使用演员表将时间四舍五入到最近的long
。
timer1 = new Timer((long) timer, new DataCollection());
BTW为了您的兴趣,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);
}
答案 1 :(得分:0)
使用浮点数(浮点数和双精度数)而不是整数数(int和long)是一个常见的错误。在您的方案中,应使用int或long来测量时间间隔,例如:毫秒。