[英]Exercise on javascript
請我從昨天開始就被困在下面的這個問題上。 下面是問題:
編寫一個程序,使用 console.log 打印從 1 到 100 的所有數字,但有兩個例外。 對於可以被 3 整除的數字,打印“Fizz”而不是數字,對於可以被 5(而不是 3)整除的數字,打印“Buzz”代替。
當你有那個工作時,修改你的程序以打印“FizzBuzz”,對於可以被 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>
首先檢查最具體的 (FizzBuzz) 條件。
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.