gpt4 book ai didi

Java时间测量不正确

转载 作者:行者123 更新时间:2023-12-02 11:39:13 25 4
gpt4 key购买 nike

我有一个java代码,它一遍又一遍地运行无限循环,在某些条件下,我想在循环中插入一个额外的步骤/函数调用。

我在循环之外定义了这些变量:

static boolean wait_activate = false; 
static long wait_tmr = -1;
static int wait_delay = 6;

然后,在我的无限循环中,当我想要启用附加代码时:

if (some-condition) { 
wait_activate = true;
System.out.println("activate");
wait_tmr = (System.currentTimeMillis() / 1000L);
}

在循环开始时,我有两个检查来插入附加代码:

if (wait_activate && (wait_tmr + wait_delay) < (System.currentTimeMillis() / 1000L)) {
// if wait period isn't over
do_additional_stuff();
}

if (wait_activate && (wait_tmr + wait_delay) > (System.currentTimeMillis() / 1000L)) {
// wait time is over:
System.out.println("Reset time: " + wait_delay);
System.out.println("Stored time: " + wait_tmr);
System.out.println("Current time: " + (System.currentTimeMillis() / 1000L));
wait_activate = false;
wait_tmr = -1;
}

现在,时间值均以秒/unixtime 为单位。 (当前时间毫秒/1000 = 秒)。 wait_delay 为 6。这意味着,两个 println 只能在激活后大约 6 秒执行(使用 wait_activate = true)。

但是,输出是这样的:

activate
Reset time: 6
Stored time: 946685043
Current time: 946685045

我不明白为什么。根据 wait_delay,它应该等待 6 秒。然而,存储的时间和当前时间之间的差异只有2秒。即使我增加wait_delay。难道我做错了什么?这是 Java 中的错误还是我(必须)使用的奇怪 JRE 版本中的错误(在 LEGO EV3 上的 LeJOS 0.9.0-beta 上运行)?

我是否犯了一个完全的“初学者错误”,只是没有看到它?还是那里有其他东西坏了?

最佳答案

看起来问题出在比较运算符上,第一个 if 条件应该包含 > 而不是 <,而第二个 if 条件应该包含 < 而不是 >。您还可以将第二个“if”条件转换为第一个“if”条件的“else”,以避免进一步的混淆。

关于Java时间测量不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48700499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com