C# periodsssss [重复]
Posted
技术标签:
【中文标题】C# periodsssss [重复]【英文标题】:C# periodssssss [duplicate] 【发布时间】:2021-08-04 13:30:25 【问题描述】:我得到了以下任务:
如果可以将给定的约会添加到约会列表中而不重叠,则返回 true 任何其他约会。 name="appointments">当前约会列表 name="appointment">要检查它是否适合其他约会的新约会 如果新约会适合当前约会,则为真:“9-10”、“11-12”、“15-16”
我当前的代码是:
public bool IsAvailable(Appointment[] appointments, Appointment appointment)
bool overlap = true;
foreach (var afspraak in appointments)
overlap = (afspraak.Start >= appointment.End || appointment.Start <= afspraak.End);
return overlap;
这段代码通过了 18 个单元测试中的 10 个:
Should return True:
[TestCase("8-9")] passed
[TestCase("8-8:30")] passed
[TestCase("10-11")] passed
[TestCase("10:45-11")] passed
[TestCase("12-15")] passed
[TestCase("12-13")] passed
[TestCase("13-14")] passed
[TestCase("14-15")] passed
[TestCase("16-17")] passed
[TestCase("16:30-17")] failed
Should return False:
[TestCase("7-8")] failed
[TestCase("8-9:30")] failed
[TestCase("9:30-9:45")] failed
[TestCase("9:30-11")] failed
[TestCase("8-10:30")] failed
[TestCase("17-18")] passed
[TestCase("12-18")] failed
[TestCase("11:30-12:30")] failed
我真的无法弄清楚我做错了什么,有人看到我做错了什么吗?
更新 2: 问题是只有现在“应该返回错误的单元测试”才能通过:(
------
【问题讨论】:
你没有跳出 for 循环,所以只有约会中的最后一个 afspraak 会影响重叠值。 【参考方案1】:使用您当前的方法,bool overlap
仅设置为最后一个比较结果。
一旦检测到无法添加约会而不重叠,请考虑中断/返回。
public bool IsAvailable(Appointment[] appointments, Appointment appointment)
foreach (var afspraak in appointments)
if((afspraak.Start >= appointment.End && appointment.End <= afspraak.Start) is false)
// return here, if the appointment overlaps, no need to continue checking
return false;
return true;
【讨论】:
好吧,它也将节省宝贵的计算时间!除此之外,处理布尔表达式时不需要is false
或==false
。
绝对!条件布尔语句不需要is false
。但是,是否使用 bang 符号 (!) 会降低可读性是有争议的。我建议遵循老师要求的代码风格和设计指南。还应注意,编译器将此比较减少到相同的 IL。
首先感谢您的回答!我检查了你的代码,你是对的,当它面临错误时,它不应该继续检查其他重叠!但是,如果将您的更改放入我的代码中,它只会传递返回真正的单元测试。见更新2
我继续为您更新了它,试试看。我修改了条件检查。
我的代码请参阅更新 2 :)以上是关于C# periodsssss [重复]的主要内容,如果未能解决你的问题,请参考以下文章