我正在开发一个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,则减去分钟。然后你测试一些东西,但没有进一步的测试,你总是递减小时数。
当代码没有做它应该做的事情时,它没有做你描述的事情。这是你真正的代码吗?