【问题标题】:Java Logarithm Clock Gives Innacurate AnswersJava 对数时钟给出了不准确的答案
【发布时间】:2013-07-31 15:42:32
【问题描述】:

好的,所以我正在构建一个时钟,它会以 Log10(hour) 的形式给出时间,并且以相同的格式给出分钟和秒,但是当我这样做时,我不断得到奇怪的输出运行。我得到的主要是 NAN,有时是无穷大(或它的负数)。我感觉我使用的数字有问题(比如它们可能太大或类似的东西) 注意:currentTime 很长,日历是日历,小时、分钟和秒是双精度数。时钟变量也是一个 JLabel。程序经过两次迭代后,总是切换到 NAN。

this.timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                new SwingWorker<Void, Void>() {
                    @Override
                    protected Void doInBackground() throws Exception {
                        currentTime = System.currentTimeMillis();
                        calendar.setTime(new Date(currentTime));
                        hour = Math.log10(hour);
                        minute = Math.log10(minute);
                        second = Math.log10(second);
                        System.out.println(hour + " " + minute + " " + second);
                        return null;
                    }

                    @Override
                    protected void done() {

                        clock.setText("<html><body><p>Log Time: "
                                + "Log<sub>10</sub>(" + hour + ") || "
                                + "Log<sub>10</sub>(" + minute + ") || "
                                + "Log<sub>10</sub>(" + second + ")</p></body></html>");
                    }
                }.execute();
            }
        }, 0, 200);

【问题讨论】:

  • 为什么你发布了难以阅读的深蓝色黑色屏幕截图,而不是在你的帖子中包含文字?您对日志操作之前hourminutesecond的值进行了哪些诊断?
  • 我使用调试器在它们被赋值的时候放置了一个断点,它们似乎总是在值下降。
  • 嗯,是的,他们会,因为您正在获取先前值的日志,这是之前值的日志,等等 - 请参阅我的答案。

标签: java swing time jlabel clock


【解决方案1】:

这段代码没有多大意义:

currentTime = System.currentTimeMillis();
calendar.setTime(new Date(currentTime));
hour = Math.log10(hour);
minute = Math.log10(minute);
second = Math.log10(second);

您将时间设置为calendar - 但随后完全忽略了它。我希望你会想要这样的东西:

currentTime = System.currentTimeMillis();
calendar.setTime(new Date(currentTime));
hour = Math.log10(calendar.get(Calendar.HOUR_OF_DAY));
minute = Math.log10(calendar.get(Calendar.MINUTE));
second = Math.log10(calendar.get(Calendar.SECOND));

编辑:如 cmets 所述,您还需要考虑当小时、分钟或秒为 0 时您会做什么。(目前还不清楚您为什么想要使用日志老实说,基于时钟的开始。)

【讨论】:

  • 当字段为0时,对数仍然会有问题。
猜你喜欢
  • 2013-12-06
  • 2018-11-13
  • 1970-01-01
  • 2020-10-03
  • 2023-02-17
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多