睡眠债务计算器:为何单数/复数小时判断函数失效?
睡眠债务计算器:单数/复数术语判断问题解决
我在完成Codecademy的睡眠债务计算器项目时,遇到一个问题:需要实现逻辑——当睡眠债务值为1时返回单数术语hour,其他情况返回复数术语hours,但最初的代码始终返回hours。
初始问题代码片段
负责判断术语的代码如下:
const SleepDebt = idealSleepHours - actualSleepHours; console.log(SleepDebt); let time = ''; const SleepHourFunction = () => { if (SleepDebt > 1) { return time = ("hours"); } else if (SleepDebt < 1) { return time = ("hours"); } else if (SleepDebt == 1) { return time = ("hour"); } else { return 'error'; } } SleepHourFunction();
问题根源:当实际睡眠比理想多1小时时,SleepDebt的值为-1,此时会触发SleepDebt < 1的条件,直接返回hours,但实际输出的是“多睡了1小时”,数值为1,应该使用单数hour。
修复后的代码
调整条件判断,将-1也纳入单数术语的判断范围:
if (SleepDebt > 1) { return time = ("hours"); } else if (SleepDebt === 1 || SleepDebt === -1) { return time = ("hour"); } else if (SleepDebt < 1) { return time = ("hours"); } else { return 'error'; } SleepHourFunction();
完整项目代码
const getSleepHours = (day) => { switch (day) { case "monday": return 6; break; case "tuesday": return 7; break; case "wednesday": return 9; break; case "thursday": return 8; break; case "friday": return 9; break; case "saturday": return 10; break; case "sunday": return 8; break; default: console.log("Error"); } }; console.log(getSleepHours("sunday")); // 预期输出周日对应的睡眠时间 const getActualSleepHours = () => { const totalHours = getSleepHours("monday") + getSleepHours("tuesday") + getSleepHours("wednesday") + getSleepHours("thursday") + getSleepHours("friday") + getSleepHours("saturday") + getSleepHours("sunday"); return totalHours; }; const getIdealSleepHours = (idealHours) => idealHours * 7; const calculateSleepDebt = () => { const actualSleepHours = getActualSleepHours(); const idealSleepHours = getIdealSleepHours(8); const SleepDebt = idealSleepHours - actualSleepHours; console.log(SleepDebt); let time = ''; const SleepHourFunction = () => { if (SleepDebt > 1) { return time = ("hours"); } else if (SleepDebt === 1 || SleepDebt === -1) { return time = ("hour"); } else if (SleepDebt < 1) { return time = ("hours"); } else { return 'error'; } } SleepHourFunction(); if (actualSleepHours == idealSleepHours) { console.log("你的睡眠时间刚刚好,继续保持!"); } else if (actualSleepHours > idealSleepHours) { console.log( "你的睡眠时间超标了,多睡了" + -SleepDebt + " " + time + "。" ); } else if (actualSleepHours < idealSleepHours) { console.log( "你需要更多睡眠,赶紧休息一下。你少睡了" + SleepDebt + " " + time + "。" ); } else { console.log("错误"); } }; calculateSleepDebt();
内容的提问来源于stack exchange,提问作者XxMusa HD
相关产品推荐
相关产品推荐

