簡體   English   中英

Javascript中的邏輯運算符

[英]Logical Operators in Javascript

我想同時被3和5整除時打印出FizzBu​​zz。我的代碼可能是什么問題?

 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");
}

主要問題在於,只有在進行其他比較之后,您才可以檢查“ FizzBu​​zz”。 如果i % 3 === 0 (打印“ FizzBu​​zz”的要求之一),它將永遠不會達到 FizzBu​​zz檢查。

作為一個簡單的解決方法,將FizzBu​​zz檢查移至第一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM