在 Northcoders 上努力解决 switch 语句问题

问题描述 投票:0回答:1

我正在尝试对 Northcoders 进行一些挑战,而且我多年来一直在尝试这个问题。

这就是问题:

**一群 Northcoder 正在计划他们的假期,并希望使用此代码来帮助他们练习用所访问国家的语言进行问候。

您编写的代码应该为问候语分配一个正确的值,具体取决于所访问的国家/地区和一天中的时间。

如果时间为 0 点或以上但小于 12 点,则为早上。如果时间为 12 点或以上但小于 24 点,则为晚上。如果时间是任何其他值,则问候语应始终为空,无论语言如何。

如果国家是西班牙或墨西哥,问候语应该是早上 buenos dias 和晚上 buenas noches。如果国家是法国,问候语应该是早上的 bon matin 和晚上的 bon soir。如果国家/地区是任何其他值,则问候语应始终为空,无论何时(我们的字典中还没有很多语言......)

提醒一下:您可以像任何其他变量一样在表达式中使用国家/地区和时间。有很多方法可以解决这个挑战!使用您迄今为止学到的任何工具。**

我的回答是这样的:

function sayHello(country, time) {
    let greeting;
    switch (country) {
    case 'Spain':
    if (time >= 0 && time < 12) {  
            greeting = 'buenos dias';
        }if (time >= 12 && time < 24) {
            greeting = 'buenas noches';
        }else if(time >=24){
            greeting = null;
        }
        break;
    case 'Mexico':
        if (time >= 0 && time < 12) {  
            greeting = 'buenos dias';
        }if (time >= 12 && time < 24) {
            greeting = 'buenas noches';
        }else if(time >=24){
            greeting = null;
        }
        break;
    case 'France':
        if (time >= 0 && time < 12){  
            greeting = 'bon matin';
        }if (time >= 12 && time < 24){
            greeting = 'bon soir';
        }else if(time >=24){
            greeting = null;
        }
        break;
        default:
        greeting = null;
    
}
    // Don't change code below this line
    return greeting;
}

这是我得到的结果,但我不明白哪里出了问题:

9 通过 2 失败

西班牙早上的问候语应该正确

✓  Well done!

西班牙晚上的问候语应该正确

✓  Well done!

如果西班牙时间无效,问候语应为空

✓  Well done!

墨西哥早上的问候语应该正确

✓  Well done!

墨西哥晚上的问候语应该正确

✓  Well done!

如果墨西哥时间无效,问候语应为空

✕ 断言错误:预期未定义等于 null

法国早上的问候语应该是正确的

✓  Well done!

法国晚上的问候语应该正确

✓  Well done!

如果法国时间无效,则问候语应为空(记住 24 是无效时间)

✓  Well done!

如果法国时间无效,问候语应为空

✕ 断言错误:预期未定义等于 null

其他国家的问候语应为空

✓  Well done!
switch-statement
1个回答
0
投票

在没有看到输入的情况下,我的猜测是在失败的情况下输入是负数。 你的代码根本无法处理这个问题。 我会更改您的代码,以便它处理所有可能的输入。我建议重构为这样的:

function sayHello(country, time) {
    let greeting;
    let morning;
    let evening;
    switch (country) {
        case 'Spain':
            morning = 'buenos dias'
            evening = 'buenas noches';
            break;
        case 'Mexico':
            morning = 'buenos dias'
            evening = 'buenas noches';
            break;
        case 'France':
            morning =  'bon matin';
            evening = 'bon soir';
            break;
        default:
            morning = null;
            evening = null;
    }
    
    if (time >= 0 && time < 12) {  
        greeting = morning;
    } else if (time >= 12 && time < 24) {
        greeting = evening;
    } else {
        greeting = null;
    }
    
    // Don't change code below this line
    return greeting;
}
© www.soinside.com 2019 - 2024. All rights reserved.