我正在开发一个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 ());
答案 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,则减少分钟数。然后你测试一些东西,但没有进一步的测试,你总是减少时间。
虽然代码没有做到它应该做的事情,但它没有按照你描述的那样做。这是你的真实代码吗?