我试图输出一个从列表中输出随机单词的代码,用户必须在60秒过后输回尽可能多的单词我正在使用6000000000000
来跟踪时间所以这很难让我弄清楚我尝试了下面的代码并且它说1512409897444
太大了但是当我输出当前/开始时间时,它输出long currentTime = System.currentTimeMillis();
long startTime = System.currentTimeMillis();
System.out.println(currentTime);
System.out.println(startTime);
while (startTime <= 6000000000000)
{
(etc. ect.)
}
所以这不是&#39对我有意义。
DialogComponent
答案 0 :(得分:4)
你想要做的是将当前时间与你开始的时间进行比较,并检查它们的差异是否低于60秒,即60000毫秒:
long startTime = System.currentTimeMillis();
while ((System.currentTimeMillis() - startTime) <= 60000) {
// still under 60 seconds...
}
答案 1 :(得分:3)
System.currentTimeMillis()
返回一个从“epoch”增加的值。您必须减去两个时间值以确定已经过的时间量。
long startTime = System.currentTimeMillis();
long elapsedTime = 0;
while (elapsedTime <= 60000) {
// etc, etc, etc
elapsedTime = System.currentTimeMillis() - startTime;
}
答案 2 :(得分:3)
正如其他人已经回答的那样,您必须将开始时间减去当前时间,以确定差异是否大于60秒(60,000毫秒)。您还可以使用TimeUnit获取更具可重复性的代码:
long startTime = System.currentTimeMillis();
while (TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - startTime) <= 60) {
//do stuff
}
如果您想知道为什么6000000000000
给出错误而currentTimeMillis()
(1512409897444)的结果不是,那是因为它们是不同的数据类型:int(32位)vs long(64位) )。文字值6000000000000
被解释为一个int值,它比最大支持的32位signed int值(2,147,483,647
)更好,并且编译器不允许这样做。如果您使用长文字而不是6000000000000L
(请注意最后的L),它会起作用。签名long的最大支持值为9,223,372,036,854,775,807
。 System.currentTimeMillis()
的结果是长值,因此1512409897444
有效。请阅读Primitive Data Types以获取更多信息。