Java 如何连续阅读时间?
我正试图制作一个简单的闹钟作为我的第一个java项目。但是,我无法让我的代码持续读取时间。我只是在java中使用SimpleLock,现在我只关心时间和分钟 我想知道如何更新我的“inthour”和“intminute”。我正在考虑读取无限while循环中的变量 感谢您的帮助,谢谢Java 如何连续阅读时间?,java,loops,clock,Java,Loops,Clock,我正试图制作一个简单的闹钟作为我的第一个java项目。但是,我无法让我的代码持续读取时间。我只是在java中使用SimpleLock,现在我只关心时间和分钟 我想知道如何更新我的“inthour”和“intminute”。我正在考虑读取无限while循环中的变量 感谢您的帮助,谢谢 Calendar now= Calendar.getInstance(); int hour = now.get(Calendar.HOUR_OF_DAY); int minute=now.get(Calendar.
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);
}
将调用移动到new.get in the loop。将调用移动到new.get in the loop。您应该为此使用线程,而不是不断打印时间。如果这是你(最有可能)需要的,请参阅上面的帖子;然而,为了了解你做错了什么,这里有一个解释 随着时间的推移,您不会更新小时和分钟变量 例如,如果在2:52运行此程序,在进入while循环之前,小时最初为2,分钟最初为52。然后,一旦进入while循环,小时=2,分钟=52,并且永远不会改变 换句话说,一旦您输入while循环的范围,如
{
和}
所示,您将不再在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:52运行此程序,在进入while循环之前,小时最初为2,分钟最初为52。然后,一旦进入while循环,小时=2,分钟=52,并且永远不会改变 换句话说,一旦您输入while循环的范围,如
{
和}
所示,您将不再在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);
}
你不应该为了得到时间而不断地循环。相反,使用
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
}
你不应该为了得到时间而不断地循环。相反,使用
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
}
您需要将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
您需要将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
大家好,欢迎来到stack overflow。在我看来,您有两个整数变量,分别是
hour
和minute
。将它们设置为循环外的特定值,然后重复打印变量。但是变量的值在循环中永远不会更新!谢谢在while循环中定义这些变量就成功了。我的闹钟现在响了。但出于某种原因,我以前在Netbeans中尝试过这种方法,但它不允许我在while循环中定义变量!我现在正在使用eclipse。大家好,欢迎来到stack overflow。在我看来,您有两个整数变量,分别是hour
和minute
。将它们设置为循环外的特定值,然后重复打印变量。但是变量的值在循环中永远不会更新!谢谢在while循环中定义这些变量就成功了。我的闹钟现在响了。但出于某种原因,我以前在Netbeans中尝试过这种方法,但它不允许我在while循环中定义变量!我现在使用的是eclipse,我认为您应该更具体一些,并且/或者包含您对代码的想法。您的回答可能会让OP感到困惑,他似乎是Java新手。我认为您应该更具体一些,并且/或者包括您对代码的想法。您的回答可能会让OP感到困惑,他似乎是Java新手。非常感谢!!!这就成功了。然而,我以前确实在netbeans中尝试过这一点(我现在正在使用eclipse),出于某种奇怪的原因,它不允许我在while循环中定义变量。非常感谢!!!这就成功了。然而,我以前确实在netbeans中尝试过这一点(我现在正在使用eclipse),出于某种奇怪的原因,它不允许我在while循环中定义变量。谢谢!在while循环中定义这些变量就成功了。我的闹钟现在响了。但出于某种原因,我以前在Netbeans中尝试过这种方法,但它不允许我在while循环中定义变量!我现在正在使用eclipse。谢谢!在while循环中定义这些变量就成功了。我的闹钟现在响了。但出于某种原因,我以前在Netbeans中尝试过这种方法,但它不允许我在while循环中定义变量!我现在正在使用eclipse。