Java时钟太快了

时间:2016-11-30 14:29:13

标签: java clock

在我的业余时间尝试用java创建一个时钟,有很多乐趣和两个小时我仍然遇到代码问题。

它告诉我当前的时间,但进展太快。

(将其复制并粘贴到IDE /编译器并运行它,你会看到)

任何人都可以帮助初学者吗?

package clock;

import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class Clock {


    public static void main(String[] args) {

        int hour;
        int minute;
        int second;
        Scanner keyb = new Scanner(System.in);


        System.out.println("What hour is it?");
        hour = keyb.nextInt();
        System.out.println("What Minute is it?");
        minute = keyb.nextInt();
        second = 0;
        Timer t = new Timer();
        t.schedule(new TimerTask() {
            Scanner keyb = new Scanner(System.in);
            int hour;
            int minute;
            int second;
            int turnOn;
            @Override
            public void run() {
                turnOn = 1;
                while (turnOn != 0){
                    System.out.println("Current time is:"+ hour +":"+minute+":"+second);
                    second ++;
                    if (second >= 59){
                        minute ++;
                        second = 0;
                    }
                    else{

                    }
                    if (minute >= 59){
                        hour ++;
                        minute = 0;
                    }
                    else{

                    }
                    if (hour >= 24){
                        hour = 0;
                    }

                }
            }

        }, 0, 1000);
    }

}

3 个答案:

答案 0 :(得分:1)

您已计划每秒启动无限循环。 public class Child { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Key] [SkipTracking] public Guid Id { get; set; } [CascadeDelete] public virtual Parent Parent { get; set; } [Required] [ForeignKey("Parent")] public Guid ParentId { get; set; } } 正确地从0开始,然后每秒运行一次run方法。如果在方法t.schedule(TimerTask, long, long)的每次调用中增加第二个,那将是正确的。不幸的是,不是递增一次,而是启动无限循环,在每次执行中递增。

run

您正在寻找什么。

请注意,请注意,空 Timer t = new Timer(); t.schedule(new TimerTask() { Scanner keyb = new Scanner(System.in); int hour; int minute; int second; boolean turnOn = true; @Override public void run() { //CHANGE HERE!!! \/ //You only want to increment seconds once in a call of run method. if (turnOn){ System.out.println("Current time is:"+ hour +":"+minute+":"+second); second ++; if (second >= 59){ minute ++; second = 0; } if (minute >= 59){ hour ++; minute = 0; } if (hour >= 24){ hour = 0; } } } }, 0, 1000); 块是多余的以及空行。您的代码中不需要它们。更有必要在StackOverflow上发布它们。你的例子应该是最小的。

答案 1 :(得分:0)

有许多事情需要考虑: (1)每次循环后等待1秒钟。 (忽略循环中的处理时间) (2)将分钟和小时逻辑放在'否则如果'块。 像这样的东西

import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;

public class Clock {

    public static void main(String[] args) {

        int hour;
        int minute;
        int second;
        Scanner keyb = new Scanner(System.in);

        System.out.println("What hour is it?");
        hour = keyb.nextInt();
        System.out.println("What Minute is it?");
        minute = keyb.nextInt();
        second = 0;
        Timer t = new Timer();
        t.schedule(new TimerTask() {
            Scanner keyb = new Scanner(System.in);
            int hour;
            int minute;
            int second;
            int turnOn;

            @Override
            public void run() {
                turnOn = 1;
                while (turnOn != 0) {
                    System.out.println("Current time is:" + hour + ":" + minute
                            + ":" + second);
                    second++;
                    if (second >= 59) {
                        minute++;
                        second = 0;
                        if (minute >= 59) {
                            hour++;
                            minute = 0;
                            if (hour >= 24) {
                                hour = 0;
                            }
                        }
                    }
                    try {
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }

        }, 0, 1000);
    }
}

答案 2 :(得分:-1)

我已经通过在while循环之后将turnOn int更改为0来修复此问题,这将使while循环停止,直到下一秒将其重置为1