我正在努力解决的数学问题说:
有一个数字是起点。我们需要创建一个程序,计算添加到分数中的奖励积分+得分的总积分+奖励。
如果起点(分数)小于或等于100,则奖励积分为5。 如果分数大于100,则奖金为分数的20%。 如果分数大于1000,则奖金为分数的10%。
其他奖励积分(必须与以前的奖励积分分开添加): 如果分数是偶数-> +1分 如果分数以5-> + 2分结束
export class AuthGuard implements CanActivate {
constructor(private auth: AuthService, private router: Router) { }
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if (this.auth.isLoggedIn !== true) {
window.alert('Test!')
this.router.navigate(['sign-in'])
}
return true;
}
}
当我将20用作参数时,我希望得到的结果是6的奖金和26的总积分。
答案 0 :(得分:1)
主要问题是您试图使用空的else
子句,但实际上发生的是,其后的语句成为该else
块的一部分。
这是您选择不使用分号结束语句的结果(总是很危险!)。如果您将分号放在最后一个else
之后,就不会有此问题。
第二,您的if
条件序列将意味着奖金将永远不会变成0.20 * score
,因为大于1000的分数最终会出现在score > 100
情况下。
实际上,一旦代码执行到那里,条件score > 100
就永远是正确的,因为那时候肯定score <= 100
是不正确的。
这是一个更正:
function solve(input) {
let score = Number(input.shift());
let bonus;
if (score <= 100) {
bonus = 5;
} else if (score < 1000) {
bonus = 0.20 * score;
} else { // certain that score >= 1000
bonus = 0.10 * score;
}
if (score % 2 === 0) {
bonus = bonus + 1;
} else if (score % 10 === 5) {
bonus = bonus + 2;
}
return score + bonus;
}
console.log(solve([101]));
请注意,您可以使用三元运算符来使其更紧凑。 score % 2 === 0
也是恰好应加的奇数奖励({放在算术表达式中的true
变为1)。
这会降低可读性,所以也许您不愿意这样做:
function solve(input) {
let score = Number(input.shift());
return score
+ ( score <= 100 ? 5
: (score < 1000 ? 0.20 : 0.10) * score )
+ (score % 2 === 0)
+ (score % 10 === 5) * 2;
}
console.log(solve([101]));