Java中的计时器-关于分钟/小时递减的几个问题



我正在开发一个Java倒计时计时器。我对Java是完全陌生的,虽然我以前学过一些c++,所以它并不完全是新的。我对此有问题-有人能很容易地看到我在逻辑上做错了什么吗?

发生了什么:

在运行时,如果您输入例如23小时,留下分钟空白,并输入5秒- 5秒应该计数为0 -分钟应该变为59小时为22。然而,一旦5秒过去,所有的数字都归零。

如果在输入框上我输入虽然23小时1分5秒-当5已经过去,它变成了22小时59分59秒,所以我知道它快到了(只是希望我可能错过了一些愚蠢的东西)。

最后是逻辑的最后一个问题-例如,如果我输入30分钟5秒,当5已经过去时,分钟变为29秒变为59,并继续倒数,但小时变为-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 ());

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

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);

你不必担心计数

使用Calendar作为日期/时间是正确的(尽管它有缺点)。这里有一个简单的替代方法:计算像

这样的总秒数
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;

这肯定比在部件上工作更不容易出错,特别是对于更复杂的操作。但是我还是推荐使用Calendar

可能是因为您将会议记录文本框留空。你能在这里写个0吗?

在运行时,如果在小时中输入例如23,则将mins保留空白和投入5秒,5秒应该是0分应该是从59点到22点。然而,一旦5秒过去,所有的数字都消失了为零。

我重命名了你的变量:

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

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

当代码没有做它应该做的事情时,它没有做你描述的事情。这是你真正的代码吗?

最新更新