Java中的计时器 - 几分钟/小时减少的问题

时间:2011-08-04 14:33:10

标签: java timer countdown

我正在开发一个Java倒数计时器。虽然之前已经完成了一些C ++,但我对Java完全不熟悉,所以并不是全新的。我遇到了这个问题 - 任何人都可以很容易地看到我在逻辑上做错了吗?

发生了什么:

在跑步时,如果以小时为单位输入23,则将分钟留空并放入5秒 - 5秒应计为0 - 分钟应为59,小时应为22.但是一旦经过5秒所有数字都归零。

如果在输入框中我输入了23小时1分钟和5秒/秒 - 当5经过时它变为22小时59分59秒因此我知道它几乎就在那里(只是希望我可能错过了一些愚蠢的东西

最后逻辑的最后一个问题 - 例如,如果我进入30分钟5秒,当5已经过去时,分钟转到29秒,然后继续倒计时,但小时数转到-1。下面的代码 - 对于很长的帖子感到抱歉但是想要绘制场景 - 谢谢 - Colly

Integer sec = new Integer (seconds.getText ());
Integer min = new Integer (minutes.getText ());
Integer hr = new Integer (hours.getText ());
int temp1 = sec.intValue ();
int temp2 = min.intValue ();
int temp3 = hr.intValue();

temp1--;
if (temp1 == -1 )
{
    temp1 = 59;
    temp2--;
    if (temp2 == 0 && temp3 != 0)
    {
        temp2 = 59;
    }
    temp3--;
}
hr = new Integer (temp3);
sec = new Integer (temp1);
min = new Integer (temp2);
hours.setText (hr.toString ());
minutes.setText (min.toString ());
seconds.setText (sec.toString ());
if (seconds.getText ().length () == 1)
    seconds.setText ("0" + seconds.getText ());

4 个答案:

答案 0 :(得分:6)

请不要手动计算时间,写作很痛苦,阅读也很痛苦。我甚至没有提到调试它的感觉。

Calendar类可能很有趣:

Calendar c = Calendar.getInstance();
c.clear(); // To reset all fields
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 5);

c.add(Calendar.SECOND, -1);

你不必担心计算。

答案 1 :(得分:0)

使用日历作为日期/时间是(尽管有其缺点)正确的事情。这里有一个简单的替代方案:计算总秒数,如

int total = 3600 * hrs + 60 * min + sec;

使用

递减和分解
int x = total;
hrs = x / 3600;
x = x - 3600 * hrs;
min = x / 60;
x = x - 60 * min;
sec = x;

这肯定比在零件上工作更不容易出错,特别是对于更复杂的操作。但同样,我建议使用日历。

答案 2 :(得分:0)

可能是因为您将分钟文本框留空了。你可以试试0吗?

答案 3 :(得分:0)

  

在运行中,如果您以小时为单位输入23,请将分钟留空   放入5秒 - 5秒应该计为0 - 分钟应该到达   59和小时到22.然而,一旦5秒过去,所有数字都会消失   为零。

我重命名了你的变种:

s--;
if (s == -1 )
{
    s = 59;
    m--;
    if (m == 0 && h != 0)
    {
        m = 59;
    }
    h--;
}

如果秒数为0,则减少分钟数。然后你测试一些东西,但没有进一步的测试,你总是减少时间。

虽然代码没有做到它应该做的事情,但它没有按照你描述的那样做。这是你的真实代码吗?