java - 在 Java 时钟中打印的第 60 分钟

标签 java clock

我不确定为什么会发生这种情况,但是结果中打印了第 60 分钟,而它应该在第 59 分钟后更改为小时。

这是我的类(class)和主程序:

public class Main {
    public static void main(String[] args) {
        BoundedCounter minutes = new BoundedCounter(59);
        BoundedCounter hours = new BoundedCounter(23);

        int i = 0;
        while (i < 121) {
            System.out.println(hours + ":" + minutes);   // the current time printed
            if (minutes.getValue() >= 59) {
                hours.getValue();
                i++;
            }
        }
    }

//有界计数器

    public class BoundedCounter {
        private int value;
        private int upperLimit;

        public BoundedCounter(int upperLimit) {
            this.upperLimit = upperLimit;
        }

        public void next() {
            if (this.value >= this.upperLimit) {
                this.value = 0;
            } else {
                this.value++;
            }
        }

        public String toString() {
            if (this.value < 10) {
                return "" + 0 + value;
            } else {
                return "" + value;
            }
        }

        public int getValue() {
            if (this.value <= this.upperLimit) {
                return this.value++;
            } else {
                return this.value = 0;
            }
        }
    }
}

一些结果:

01:56 01:57 01:58 01:59 02:60 02:00 02:01 02:02 02:03 02:04 02:05 02:06 02:07 02:08 02:09 02:10 02:11 02:12 02:13 02:14 02:15 02:16 02:17 02:18 02:19 02:20 02:21 02:22 02:23 02:24 02:25 02:26 02:27 02:28 02:29 02:30 02:31 02:32 02:33 02:34 02:35 02:36 02:37 02:38 02:39 02:40 02:41 02:42 02:43 02:44 02:45 02:46 02:47 02:48 02:49 02:50 02:51 02:52 02:53 02:54 02:55 02:56 02:57 02:58 02:59 03:60 03:00 03:01 03:02 03:03 03:04 03:05

即2:60 和 3:60 是意外的输出

最佳答案

首先,您的方法正在做它们不应该做的事情。例如,getValue() 应该只返回值,而不是递增它。这是如何做到的:

Main.java

public class Main {
    public static void main(String[] args) {
        BoundedCounter minutes = new BoundedCounter(59);
        BoundedCounter hours = new BoundedCounter(23);

        int i = 0;
        while (i < 121) {
            System.out.println(hours + ":" + minutes);

            minutes.next();                 // counting minutes
            if (minutes.getValue() == 0) {  // when minutes==0, count hours
                hours.next();               // counting hours
                i++;
            }
        }
    }
}

BoundedCounter.java

class BoundedCounter {
    private int value;
    private int upperLimit;

    public BoundedCounter(int upperLimit) {
        this.upperLimit = upperLimit;
    }

    public void next() {
        // when reach the upperLimit, the next value should be 0
        // so >= is not needed, just == will do
        this.value = this.value == this.upperLimit ? 0 : this.value+1;
    }

    public String toString() {
        // using smarter approach to pad with zeros :)
        return String.format("%02d", value);
    }

    public int getValue() {
        // this method should only return the value, not change it in any way
        return this.value;
    }
}

一些输出:

00:00 00:01 00:02 00:03 00:04 00:05 00:06 00:07 00:08 00:09 00:10 00:11 00:12 00:13 00:14 00:15 00:16 00:17 00:18 00:19 00:20 00:21 00:22 00:23 00:24 00:25 00:26 00:27 00:28 00:29 00:30 00:31 00:32 00:33 00:34 00:35 00:36 00:37 00:38 00:39 00:40 00:41 00:42 00:43 00:44 00:45 00:46 00:47 00:48 00:49 00:50 00:51 00:52 00:53 00:54 00:55 00:56 00:57 00:58 00:59 01:00 01:01 01:02 01:03 01:04 01:05 01:06 01:07 01:08 01:09 01:10 01:11 01:12 01:13 01:14 01:15 01:16 01:17 01:18 01:19 01:20 01:21 01:22 01:23 01:24 01:25 01:26 01:27 01:28 01:29 01:30 01:31 01:32 01:33 01:34 01:35 01:36 01:37 01:38 01:39 01:40 01:41 01:42 01:43 01:44 01:45 01:46 01:47 01:48 01:49 01:50 01:51 01:52 01:53 01:54 01:55 01:56 01:57 01:58 01:59 02:00 02:01

关于java - 在 Java 时钟中打印的第 60 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35643029/

相关文章:

c++ - 我的简单游戏的计时器非常不... C++

precision - 有关时钟精度/准确度的声明有何含义?

c - CLOCK_MONOTONIC 和 CLOCK_MONOTONIC_COARSE 是否具有相同的基数?

java - 正则表达式匹配字符串列表并忽略字符串列表

java - 如何在 IF 语句中使用数组?

java - 删除线文本ListView找不到符号方法

c++ - 数字时钟c++

iPhone 注册时钟更新

java - 来自 application.properties 的 Mapstruct 值

java - 重新绘制椭圆,JAVA Swing/AWT