c# - 为闹钟打盹
问题描述
我必须为班级修改一个警报程序,但我不明白为什么它不起作用。希望有人能给我一些见解。它现在的工作方式是在程序启动时加载几个警报。
每个警报都是添加到数组中的警报类的对象,其中枚举 AlarmState 设置为“开”。它循环遍历数组,如果一个警报与当前时间匹配且 AlarmState 为“On”,则警报响起,将 DateTime 变量“snoozeTime”设置为未来 5 秒,并将状态更改为“Snooze”。但是,如果它在数组中循环并且一个警报与 snoozeTime 匹配并且状态为“Snooze”,那么它将警报状态更改为“Off”。
现在,状态发生变化,并且 snoozeTime 变量设置正确。但是,警报似乎永远不会与 snoozeTime 匹配,即使当我打印 snoozeTime 时它看起来也匹配。另外,如果你好奇我为什么在未来只设置 5 秒的贪睡时间,那是因为我还不知道如何使用按键。
这是主程序的相关部分:
// Get current time.
DateTime currTime = DateTime.Now;
DateTime snoozeTime = new DateTime();
// Continually show current time until alarm time reached.
while (alarms.Length > 0)
{
Console.WriteLine("Current time is: {0:HH:mm:ss}", currTime);
// WRITE LOOP TO CHECK WHETHER ANY ALARMS MATCH.
foreach (var alarm in alarms)
{
if (alarm.Matches(currTime))
{
Console.WriteLine("Alarm going off at: {0}", alarm.FormattedTime());
//alarm.Minute += 1;
snoozeTime = DateTime.Now.AddSeconds(5.0);
alarm.State = AlarmState.Snooze;
Console.WriteLine("Snooze set for: {0}", snoozeTime);
}
if (alarm.Matches(snoozeTime) && alarm.State == AlarmState.Snooze)
{
Console.WriteLine("Shutting off");
//set state to off
alarm.State = AlarmState.Off;
}
}
Thread.Sleep(1000); // pause for a second
currTime = DateTime.Now; // update current time
}
这是我正在使用的匹配方法:
// Returns whether alarm should go off at time "when".
public bool Matches(DateTime when)
{
return (State != AlarmState.Off && Hour == when.Hour && Minute == when.Minute && Second == when.Second);
//return (State == AlarmState.On || State == AlarmState.Snooze) &&
//Hour == when.Hour && Minute == when.Minute && Second == when.Second;
}
解决方案
正如 Maxime 作为对您问题的评论所说的那样,您绝对应该检查alarm.State == AlarmState.On
您的第一个 If 语句,否则您的警报将与两个 if 语句连续匹配。
我更担心的是,一旦alarm.Matches(currTime)
满足,你就设置了,alarm.State == AlarmState.Snooze
但你似乎永远不会更新设置闹钟的时间。这个含义alarm.Matches(snoozeTime) && alarm.State == AlarmState.Snooze
永远不会正确,因为您设置闹钟的时间已经过去。
推荐阅读
- javascript - Tensorflow Js 在注册 blazeface 中找不到后端
- c++ - 如何用自定义模式的矩形填充 QPixMap?
- json - JSON 的 SWI-Prolog 语法
- sql - 合并查询结果中多列的内容
- html - 如何在不影响中间 div 的情况下对齐和居中 3 个 div
- html - 为什么线条没有出现在我的 SVG 元素中的圆圈上
- python - 如何添加超时,python discord bot
- c - printf 为变量的值返回 6422044
- c++ - e`的值在windbg中是什么意思
- bash - 一个命令在标准输出上放一个键,然后是下一个 | 使用从标准输入获取的密钥打开数据库