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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

hdoj1358 Period字符串--最小循环节 i/next[i]即为其长度

poj 1961Period(字符串--KMP循环节)

如何附加到PHP中的现有数组值[重复]

poj1961 Period 2012-01-11

如何从下拉菜单中删除重复的值

期间字符串[重复]