Java 如何连续阅读时间?

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.

我正试图制作一个简单的闹钟作为我的第一个java项目。但是,我无法让我的代码持续读取时间。我只是在java中使用SimpleLock,现在我只关心时间和分钟

我想知道如何更新我的“inthour”和“intminute”。我正在考虑读取无限while循环中的变量

感谢您的帮助,谢谢

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。