C# 周期
我得到了以下任务: 如果给定的约会可以添加到约会列表中而没有重叠,则返回trueC# 周期,c#,overlap,overlapping,C#,Overlap,Overlapping,我得到了以下任务: 如果给定的约会可以添加到约会列表中而没有重叠,则返回true 任何其他约会。 name=“约会”>当前约会的列表 name=“appointment”>要检查其是否符合其他约会的新约会 如果新约会介于当前约会之间,则为“9-10”、“11-12”、“15-16” 我目前的代码是: public bool IsAvailable(Appointment[] appointments, Appointment appointment) {
任何其他约会。
name=“约会”>当前约会的列表
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;
}
我真的不知道我做错了什么,有人看到我做错了什么吗
更新2:
问题是只有现在“应该返回错误的单元测试”才通过:(
使用当前方法,bool
overlap
仅设置为上次比较结果的值
一旦您发现无法添加没有重叠的约会,请考虑中断/返回
public bool可用(预约[]预约,预约)
{
foreach(var afspraak in任命)
{
如果((afspraak.Start>=appointment.End&&appointment.End您没有跳出for循环,因此只有最后一个afspraak in appointment会影响重叠值。这也将节省宝贵的计算时间!除此之外,在处理布尔表达式时,您不需要is false
或==false
。绝对y!为false
对于条件布尔语句不是必需的。但是,无论是否使用bang符号(!)降低可读性是有争议的。我建议遵循教师要求的代码风格和设计指南。还应该注意的是,编译器将这种比较减少到相同的IL。首先,感谢您的回答!我检查了您的代码,您是对的,当它遇到错误时,不应继续检查其他错误r重叠!但如果将您的更改放入我的代码中,它将只传递返回值为真的单元测试。请参阅更新2我继续为您更新了它,请尝试。我修改了条件检查。我尝试在更新中使用您的代码,但这一次只有应返回值为假的测试有效:/
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
------