Northcoders switch语句挑战遇问题:2个测试用例未通过求助
问题分析与修复方案
问题根源
你的代码存在两个核心问题导致测试失败:
- 变量初始值未定义:
let greeting;只声明了变量但未赋值,当传入的时间既不满足0<=time<12也不满足12<=time<24(比如time=-1或者time=25)时,greeting会保持undefined,但题目要求这类场景必须返回null。 - 时间逻辑覆盖不全:你在每个case里只处理了
time>=24的情况,但完全没考虑time<0的无效时间,而且独立的if语句会导致逻辑分支混乱,比如当time=-1时,所有if条件都不触发,最终返回undefined。
修复后的代码
function sayHello(country, time) { let greeting = null; // 初始赋值为null,默认返回符合要求的无效值 // 先判断时间是否有效,无效直接返回null if (time >= 0 && time < 24) { switch (country) { case 'Spain': case 'Mexico': greeting = time < 12 ? 'buenos dias' : 'buenas noches'; break; case 'France': greeting = time < 12 ? 'bon matin' : 'bon soir'; break; // 其他国家保持greeting为null } } // 时间无效时,greeting已经是null,无需额外处理 // Don't change code below this line return greeting; }
修改说明
- 初始值赋值:一开始就把
greeting设为null,确保所有不符合条件的场景(无效时间、非指定国家)都默认返回null。 - 逻辑分层:先判断时间是否在有效范围
[0,24)内,无效的话直接跳过后续分支,保持greeting为null。 - 简化重复代码:把Spain和Mexico的逻辑合并,用三元运算符简化问候语的判断,减少冗余代码。
- 完整覆盖场景:不管是
time<0还是time>=24,都会返回null,满足题目要求。
内容的提问来源于stack exchange,提问作者Riona McCumskay
相关产品推荐
相关产品推荐

