Javascript 我不能解决与分数和加分有关的数学问题

Javascript 我不能解决与分数和加分有关的数学问题,javascript,Javascript,我正在努力解决的数学问题是: 有一个数字是起点。我们需要创建一个程序,计算添加到分数中的奖金积分+分数+奖金的总分 如果起点(分数)小于或等于100,则奖励分数为5。 如果分数大于100,奖金为分数的20%。 如果分数大于1000,奖金为分数的10% 附加积分(必须与之前的积分分开添加): 如果分数为偶数->+1分 如果分数以5->+2分结束 function solve(input) { let score = Number(input.shift()); let bonus

我正在努力解决的数学问题是:

有一个数字是起点。我们需要创建一个程序,计算添加到分数中的奖金积分+分数+奖金的总分

如果起点(分数)小于或等于100,则奖励分数为5。 如果分数大于100,奖金为分数的20%。 如果分数大于1000,奖金为分数的10%

附加积分(必须与之前的积分分开添加): 如果分数为偶数->+1分 如果分数以5->+2分结束

function solve(input) {
    let score = Number(input.shift());
    let bonus = 0.00;

    if (score <= 100) {
        bonus = 5;
    } else if (score > 100) {
        bonus = 0.20 * score
    } else if (score > 1000) {
        bonus = 0.10 * score
    } else 

    if (score % 2 === 0) {
        bonus = bonus + 1
    } else if (score % 10 === 5) {
        bonus = bonus + 2
    } else

    console.log(bonus)
    console.log(score + bonus)

}
函数求解(输入){
让分数=数字(input.shift());
奖金=0.00;
如果(分数100){
奖金=0.20*分
}否则如果(分数>1000){
奖金=0.10*分
}否则
如果(分数%2==0){
奖金=奖金+1
}否则如果(分数%10==5){
奖金=奖金+2
}否则
控制台日志(奖金)
控制台日志(分数+奖金)
}

当我把20作为一个参数时,我期望得到6作为奖励,26作为总分。

主要问题是你试图使用空的
else
子句,但真正发生的是它后面的语句成为
else
块的一部分

这是您选择不使用分号结束语句的结果(总是很危险!)。如果您在最后的
else
后面放置分号,则不会出现此问题

其次,你的
if
条件的顺序将意味着奖金永远不会达到
0.20*分数
,因为分数大于1000的情况将以
分数>100
结束


事实上,一旦代码执行到达那里,该条件
score>100
将始终为真,因为此时肯定
score您的第一个
}否则
会在它之后流入if。所以它实际上是一个
else if
。另外,如果前面的所有if语句都为false,那么您的最终
}else
将只显示您的bonus console.log。可能要删除这两个else,或者在它们后面放一个空的
{}
。在first if else块中也有错误的条件顺序,分数>1000部分将永远不会执行,因为分数>100条件出现在前面,并且在大于1000的值上将被视为真实。非常感谢您为解释这一点付出的努力,并且非常全面!你的回答对我来说是非常翔实和有见地的。我绝对不会选择半纵队。不幸的是,在我学习的课程(JS基础知识)中,我们没有介绍您建议的第二种方法,但我将深入探讨,因为它看起来确实更整洁。。。再次感谢!不知道这个,对网站来说太新了:D现在就完成了。