簡體   English   中英

在 JavaScript 上練習

[英]Exercise on javascript

請我從昨天開始就被困在下面的這個問題上。 下面是問題:

編寫一個程序,使用 console.log 打印從 1 到 100 的所有數字,但有兩個例外。 對於可以被 3 整除的數字,打印“Fizz”而不是數字,對於可以被 5(而不是 3)整除的數字,打印“Buzz”代替。

當你有那個工作時,修改你的程序以打印“FizzBu​​zz”,對於可以被 3 和 5 整除的數字(對於只能被其中一個整除的數字,仍然打印“Fizz”或“Buzz”)。

我只得到了前兩個條件,但沒有得到第三個條件。 我不知道該怎么辦了,我已經嘗試了很多選擇。 下面是我的代碼:

<html>
<head/head>
<body>
    <script type="text/javascript">
        for (i = 1; i <= 100; i++)
            if (i % 3 == 0) {
                document.write("Fizz");
                document.write("<br />");
            } else if (i % 5 == 0 && i % 3 != 0) {
            document.write("Buzz");
            document.write("<br />");
            } else if (i % 3 && 5 == 0 && i % 3 != 0 && i % 5 != 0) {
                document.write("FizzBuzz");
                document.write("<br />");
            } else {
                document.write(+i);
                document.write("<br />");
            }
    </script>
</body>
</html>

首先檢查最具體的 (FizzBu​​zz) 條件。

function fizzBuzz() {
    for(var i = 1; i <= 100; i++){
        if(i % 5 === 0 && i % 3 === 0){
            console.log('FizzBuzz');
        } else if(i % 3 === 0){
            console.log('Fizz');
        } else if(i % 5 === 0){
            console.log('Buzz');
        } else {
            console.log(i);
        }
    }
}

這是您的代碼的更新版本,我在您編寫時保留它並進行了一些更改,我讓它在不觸及邏輯的情況下工作,您可以看到問題出在第一次比較和第二次“if else”(5永遠不會等於0)。 你可以優化代碼不止於此,祝你好運。

    <html>
      <head/head>
      <body>
          <script type="text/javascript">
              for (i = 1; i <= 100; i++)
                  if (i % 3 == 0 && i % 5 != 0) {
                      document.write("Fizz");
                      document.write("<br />");
                  } else if (i % 5 == 0 && i % 3 != 0) {
                      document.write("Buzz");
                      document.write("<br />");
                  } else if (i % 3 == 0 && i % 5 == 0) {
                      document.write("FizzBuzz");
                      document.write("<br />");
                  } else {
                      document.write(+i);
                      document.write("<br />");
                  }
          </script>
      </body>
      </html>

既然大家都在貢獻,我不妨給你一個有趣的解決方案:

var i = 101;
while(i --> 0){                                         // as i goes to 0... wat
    var state = !!(i % 3) << 1 | !!(i % 5),             // compute state?
        output = ["FizzBuzz", "Fizz", "Buzz", i];       // hmm...
    console.log(output[state]);                         // output correct string
}

1st - 而不是document.write使用console.log就像問題說的

2nd - 您在 head 部分有語法錯誤。 應該是<head></head>

第三 - 對於問題的第一部分,您需要的是:

for (i = 1; i <= 100; i++) {
  // if i is divisible by 3      
  if (i % 3 == 0) {
    console.log("Fizz");    
  }
  // if i is divisible by 5 (no need to check for 3 again)
  else if (i % 5 == 0) {
    console.log("Buzz");    
  } 
  // else
  else {
    console.log(i);
  }
}

第 4 - 對於第二部分,如果您已經擁有的話,您需要添加一個額外的:

for (i = 1; i <= 100; i++) {
  // if i is divisible by 3 and 5
  if (i % 3 == 0 && i % 5 == 0) {
    console.log("FizzBuzz");
  }
  // if i is divisible by 3      
  else if (i % 3 == 0) {
    console.log("Fizz");    
  }
  // if i is divisible by 5 (no need to check for 3 again)
  else if (i % 5 == 0) {
    console.log("Buzz");    
  } 
  // else
  else {
    console.log(i);
  }
}

工作小提琴: https : //jsfiddle.net/tedmanowar/amapqcLL/

您可以使用 while 循環,而不是使用嵌套的 if 語句來檢查條件。

 let number = 0; while (number <= 100) { if(number % 3 === 0 && number % 5 === 0){ console.log("FizzBuzz"); }else if(number % 3 === 0){ console.log("Fizz"); }else if(number % 5 === 0){ console.log("Buzz"); }else{ console.log(number); } number++; }

這個解決方案是最簡單和最簡單的。 雖然有多種方法可以解決這個問題。

                for (n=1; n<=100; n++){
                   let output = "";
                   if(n % 3=== 0) output += "Fizz"
                   if(n % 5=== 0) output += "buzz"
                   console.log(output || n);
                   }

我不推薦這個答案 - 因為它很難維護 - 但它確實在很少的行中完成。 它還依賴於只有公因數為 1 的兩個數字。

 for(let i=1; i<=100; i++) { document.write(`${i%15?i%5?i%3?i:'Fizz':'Buzz':'FizzBuzz'}<br/>`) }

這是使用三元運算符和反引號模板字符串。

您應該只使用一個從 1 開始並且小於 101(最多 100)的循環並測試%n === 0 換句話說,確保沒有剩余。

 function startConsoleDemo(){ for(var i=1,r; i<101; i++){ // loop from 1 to 100 r = i; // default value of r if(i % 3 === 0 && i % 5 === 0){ // if i/3 and 1/5 do not produce a remainder r = 'FizzBuzz'; // reassign r } else if(i % 3 === 0){ // we knew i % 5 !== 0 so see if i/3 does not produce a remainder r = 'Fizz'; // reassign r } else if(i % 5 === 0){ // we already knew i % 3 !== 0 - you know the drill r = 'Buzz'; // reassign r } console.log(r); // console at each step of the loop no matter what } } startConsoleDemo(); // without () you can use like a var then () later

我有一個解決方案,我很確定它對你有用。

for (let i = 1; i <= 100; i++) {
  if (i % 3 === 0 && i % 5 === 0) {
    document.write(`${i} FizzBuzz`);
  } else if (i % 3 === 0 && i % 5 !== 0) {
    document.write(`${i} Fizz`);
  } else if (i % 5 === 0 && i % 3 !== 0) {
    document.write(`${i} Buzz`);
  } else {
    document.write(`${i}`);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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