我正在尝试制作一个简单的闹钟作为我的第一个java项目。但是,我无法让我的代码继续阅读时间。我只是在java中使用simpleclock的东西而且我现在只会担心时间和分钟。
我想知道如何更新我的“int hour”和“int minute”。我正在考虑在无限循环中读取变量。
感谢任何帮助,谢谢!
Calendar now= Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute=now.get(Calendar.MINUTE);
int k=1;
while (k==1) {
System.out.println(hour);
System.out.println(minute);
}
答案 0 :(得分:1)
将调用移到循环内的new.get。
答案 1 :(得分:1)
你应该使用一个线程而不是不断地打印时间。如果您(最有可能)需要,请参阅上面的帖子;然而,为了了解你做错了什么,这里有一个解释。
随着时间的推移,您不会更新小时和分钟变量。
例如,如果您在2:52运行此程序,之前,则输入while循环,小时最初为2,分钟最初为52.然后,一旦您输入循环,小时= 2,分钟= 52,永远不会改变。
换句话说,一旦您输入了while循环的范围,如{
和}
所示,您将不会运行前面的三个语句再次循环。
此外,由于while循环将评估条件,您只需将k==1
技巧替换为true
,这是一个始终评估为true的条件。两种方式都是等价的,但后者更像优雅。
这是一个解决方案:
while (true) {
Calendar now= Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute=now.get(Calendar.MINUTE);
System.out.println(hour);
System.out.println(minute);
}
答案 2 :(得分:1)
你不应该连续循环来获得时间。相反,使用Thread.sleep(int millis)
让代码等待每分钟。这减轻了处理器的负担(您的实现使处理器不断忙于无用的更新)。另外,为了获得时间,您应该在循环内将调用移至now.get(...)
。试试这个:
Calendar now= Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute=now.get(Calendar.MINUTE);
while (true) {
hour = now.get(Calendar.HOUR_OF_DAY);
minute=now.get(Calendar.MINUTE);
System.out.println(hour);
System.out.println(minute);
// sleep for 5 secs (so minute updates will be accurate to 5 secs)
// Thread.sleep is not always precise and inaccuracies
// could build up if we slept for 1 minute
try { Thread.sleep(5000); } catch(Exception e){}
// later on when you build more complex programs,
// you will make use of the catch block, but for now, ignore it
}
答案 3 :(得分:1)
您需要将now.get方法移动到while循环。
如果您不想继续进行不必要的更新,您可以制作一个计时器,并且每隔几秒钟只更新一次:
import java.util.Timer; // import Timer
// Some Codes Here
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Whatever you want to do with the time, lets say print
Calendar now= Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute=now.get(Calendar.MINUTE);
System.out.println(hour);
System.out.println(minute);
}
}, 4*1000, 4*1000); // time to trigger in milliseconds and time to repeat