[英]Logical Operators in Javascript
我想同時被3和5整除時打印出FizzBuzz。我的代碼可能是什么問題?
for(var i = 1; i<=20; i++){
if(i % 3 ===0){
console.log("Fizz");
}else if(i % 5 ===0){
console.log("Buzz");
}else if(i%3 ==0 && i%5 ==0){
console.log("FizzBuzz");
}else{
console.log(i);
}
}
如果第一個或第二個條件為true,則它將進入該塊,但else if
條件滿足,則不評估其他else if
條件。 因為第三個條件要求第一個條件和第二個條件都為真,所以它永遠不會進入該塊。
嘗試像這樣安排您的條件:
for(var i = 1; i<=20; i++){
if(i%3 === 0 && i%5 === 0){
console.log("FizzBuzz");
}else if(i % 3 === 0){
console.log("Fizz");
}else if(i % 5 === 0){
console.log("Buzz");
}else{
console.log(i);
}
}
但是,只是為了好玩,這是一個更緊湊的版本,它濫用了條件運算符 :
for(var i = 1; i<=20; i++){
console.log(i % 15 ? i % 5 ? i % 3 ? i : "Fizz" : "Buzz" : "FizzBuzz");
}
主要問題在於,只有在進行其他比較之后,您才可以檢查“ FizzBuzz”。 如果i % 3 === 0
(打印“ FizzBuzz”的要求之一),它將永遠不會達到 FizzBuzz檢查。
作為一個簡單的解決方法,將FizzBuzz檢查移至第一個if語句。
for(var i = 1; i <= 20; i++) {
if(i % 3 === 0 && i % 5 === 0) {
console.log("FizzBuzz");
}
else if(i % 5 === 0) {
console.log("Buzz");
}
else if(i % 3 === 0) {
console.log("FizzBuzz");
}
else {
console.log(i);
}
}
還要考慮的另一件事是,如果i被3和5整除,那么它可以被它們的最小公分母整除,是嗎? 3和5的最小公分母(可被一組數字整除的最小整數)是15,因此可以替換...
if(i % 3 === 0 && i % 5 === 0) {
...與...
if(i % 15 === 0) {
(i%3 ==0 && i%5 ==0)
應該是第一個條件。 如果您考慮一下,如果我被3和5整除,它將在到達第三個if
語句之前輸入第一個if
語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.