闪烁的布尔值与system.currentTimeMillis()

3
为什么这个值总是为真?我就是想不明白如何让一个布尔值每秒钟“闪烁”。
long millis = System.currentTimeMillis();
boolean blink = (Math.floor(millis/1000 + 0.5)==Math.floor(millis/1000));
2个回答

2
变量millislong类型,这是一种整数类型,因此在添加0.5之前,millis/1000会被截断为整数值。
更简单的方法可能是:
boolean blink = ((millis / 1000) & 1) == 0;

这将毫秒值转换为秒(通过除以1000),然后测试最低位是否为0。


2
这是我的做法。
  long millis = System.currentTimeMillis();
  boolean blink = (millis % 2000) < 1000;

这里使用取模运算符%来确定当前时间在重复的两秒窗口中的位置。然后它会判断它是否在窗口的第一半(0到999)或第二半(1000到1999)中。这将导致一个布尔值,每秒交替为true和false。


谢谢,可以了。稍后(大约5分钟)我会接受你的答案。 - CookieMonster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接