使用 for 循环的 Fizzbuzz 游戏
Fizzbuzz game with for loop
我正在尝试执行一个函数,在我的 console.log 中打印 1-27 之间的数字。
当一个数可以被3整除时,应该用"Fizz"
代替这个数
当一个数可以被5整除时,将其替换为"Buzz"。
如果数字可以同时被3和5整除,则替换为"Fizzbuzz"
参考:http://en.wikipedia.org/wiki/Fizz_buzz)
这是我的代码:
var fizzbuzz = function(start,stop) {
for (var x=1;x <= stop; x++)
var string =',';
if (x%3 == 0) {
string += 'Fizz';
}
if (x%5 == 0){
string += 'Buzz';
}
if (x%5 && x%3){
string += 'Fizzbuzz';
}
return string;
};
Console.log 给我 "," 我不确定我做错了什么。
澄清一下。
我希望根据 If 语句中的 'stop' 打印出 1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,14,Fizz Buzz,16,17,Fizz,19,Buzz,Fizz,22,23,Fizz,Buzz,26,Fizz
等答案。
Valentins 的评论是正确的,您确实需要在循环周围添加方括号。
但是,您也在循环的每次迭代中重新定义字符串 var。
最后一个 if 也会使输出有点错误,例如 15 会命中所有 3 个语句并打印 FizzBuzzFizzBuzz
所以选择
var fizzbuzz = function(start,stop) {
var string = '';
var addComma = false;
for (var x=1;x <= stop; x++){
addComma = false;
if (x%3 == 0) {
string += 'Fizz';
addComma = true;
}
if (x%5 == 0){
string += 'Buzz';
addComma = true;
}
if(addComma && x!== stop){
string+=','
}
}
return string;
};
这不是跟踪在何处添加逗号的最佳方式,但它可以做到这一点。
您需要更正您的 for 循环
你有
for (var x=1;x <= stop; x++)
var string =',';
一直执行到 x <= stop
。
Javascript 允许你避免使用括号,如果你想像这样执行一行语句。
if (a===true)
alert(a); // This is executed when a === true
alert(b); // This is always executed no matter what a is
这里的缩进是为了表达观点,但是 if 语句会执行所有内容,直到第一个分号。
另一方面,如果你想执行多行代码,如果 a === true
你会选择像这样使用大括号
// Alert a and alert b are only executed if a is true
if (a===true) {
alert(a);
alert(b);
}
if 语句将执行花括号中的所有内容。
需要注意的是return
停止执行并退出函数。一旦到达 return 语句,循环将退出。这就是为什么你应该 return for 循环后的整个字符串。
这是一个更好的实现方式但您绝对应该自己尝试实现它
var fizzbuzz = function(start,stop) {
var string = '';
for (var x=1;x <= stop; x++) {
var status = x.toString(); //Each time the loop executes a new variable `status`is created and set to the value `x` for that loop.
// x is checked as to whether it is divisible by 3 or 5 or both, if it is divisible its status is set to a that value
if (x%3 === 0) {
status = 'Fizz';
}
if (x%5 === 0){
status = 'Buzz';
}
if (x%5 === 0 && x%3 === 0){
status = 'Fizzbuzz';
}
string += status; // Append status to the end
if (x !== stop){ // If x is not equal to the value of stop add a comma
string += ',';
}
}
return string; //This returns the string value which has had statuses and commas appended to it.
};
这有多个问题:
(1) 构造
for (var x=1;x <= 10; x++)
statement;
otherstatement;
将在执行其他语句之前执行语句 10 次。没有大括号,Javascript假定下一条语句是for循环的内容;
(2) string 变量在每个循环中都被重新定义,去掉了前面的版本,所以 return 语句只打印出 string 的最后一个值。
(3) fizzBuzz if语句逻辑错误。如果您按照此执行除以 15 的语句,它将执行所有三个语句。因此,第三个 iff 语句是完全多余的。
解决方案如下:
var fizzBuzz = function(x){
if(x%15==0){
return "Fizzbuzz";
}
if(x%3==0){
return "Fizz";
}
if(x%5==0){
return "Buzz";
}
return x;
};
var mainFunction = function(start,stop){
var str="";
for(var i=start; i < stop; i++){
str += fizzBuzz(i) + ", ";
}
return str;
};
请注意,仅当此版本要求您打印 Fizzbuzz 而不是 FizzBuzz 时,%15 的第三个 if 语句才是必需的。
for(let x = 0; x <=30; x++) {
if (x % 15 === 0) {
console.log('Fizzbuzz')
} else if (x % 5 === 0) {
console.log('Buzz')
} else if (x % 3 === 0) {
console.log('Fizz')
} else {
console.log(x)
}
}
我就是这样处理的
我正在尝试执行一个函数,在我的 console.log 中打印 1-27 之间的数字。
当一个数可以被3整除时,应该用"Fizz"
代替这个数
当一个数可以被5整除时,将其替换为"Buzz"。
如果数字可以同时被3和5整除,则替换为"Fizzbuzz"
参考:http://en.wikipedia.org/wiki/Fizz_buzz)
这是我的代码:
var fizzbuzz = function(start,stop) {
for (var x=1;x <= stop; x++)
var string =',';
if (x%3 == 0) {
string += 'Fizz';
}
if (x%5 == 0){
string += 'Buzz';
}
if (x%5 && x%3){
string += 'Fizzbuzz';
}
return string;
};
Console.log 给我 "," 我不确定我做错了什么。
澄清一下。
我希望根据 If 语句中的 'stop' 打印出 1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,14,Fizz Buzz,16,17,Fizz,19,Buzz,Fizz,22,23,Fizz,Buzz,26,Fizz
等答案。
Valentins 的评论是正确的,您确实需要在循环周围添加方括号。 但是,您也在循环的每次迭代中重新定义字符串 var。
最后一个 if 也会使输出有点错误,例如 15 会命中所有 3 个语句并打印 FizzBuzzFizzBuzz
所以选择
var fizzbuzz = function(start,stop) {
var string = '';
var addComma = false;
for (var x=1;x <= stop; x++){
addComma = false;
if (x%3 == 0) {
string += 'Fizz';
addComma = true;
}
if (x%5 == 0){
string += 'Buzz';
addComma = true;
}
if(addComma && x!== stop){
string+=','
}
}
return string;
};
这不是跟踪在何处添加逗号的最佳方式,但它可以做到这一点。
您需要更正您的 for 循环
你有
for (var x=1;x <= stop; x++)
var string =',';
一直执行到 x <= stop
。
Javascript 允许你避免使用括号,如果你想像这样执行一行语句。
if (a===true)
alert(a); // This is executed when a === true
alert(b); // This is always executed no matter what a is
这里的缩进是为了表达观点,但是 if 语句会执行所有内容,直到第一个分号。
另一方面,如果你想执行多行代码,如果 a === true
你会选择像这样使用大括号
// Alert a and alert b are only executed if a is true
if (a===true) {
alert(a);
alert(b);
}
if 语句将执行花括号中的所有内容。
需要注意的是return
停止执行并退出函数。一旦到达 return 语句,循环将退出。这就是为什么你应该 return for 循环后的整个字符串。
这是一个更好的实现方式但您绝对应该自己尝试实现它
var fizzbuzz = function(start,stop) {
var string = '';
for (var x=1;x <= stop; x++) {
var status = x.toString(); //Each time the loop executes a new variable `status`is created and set to the value `x` for that loop.
// x is checked as to whether it is divisible by 3 or 5 or both, if it is divisible its status is set to a that value
if (x%3 === 0) {
status = 'Fizz';
}
if (x%5 === 0){
status = 'Buzz';
}
if (x%5 === 0 && x%3 === 0){
status = 'Fizzbuzz';
}
string += status; // Append status to the end
if (x !== stop){ // If x is not equal to the value of stop add a comma
string += ',';
}
}
return string; //This returns the string value which has had statuses and commas appended to it.
};
这有多个问题: (1) 构造
for (var x=1;x <= 10; x++)
statement;
otherstatement;
将在执行其他语句之前执行语句 10 次。没有大括号,Javascript假定下一条语句是for循环的内容;
(2) string 变量在每个循环中都被重新定义,去掉了前面的版本,所以 return 语句只打印出 string 的最后一个值。
(3) fizzBuzz if语句逻辑错误。如果您按照此执行除以 15 的语句,它将执行所有三个语句。因此,第三个 iff 语句是完全多余的。
解决方案如下:
var fizzBuzz = function(x){
if(x%15==0){
return "Fizzbuzz";
}
if(x%3==0){
return "Fizz";
}
if(x%5==0){
return "Buzz";
}
return x;
};
var mainFunction = function(start,stop){
var str="";
for(var i=start; i < stop; i++){
str += fizzBuzz(i) + ", ";
}
return str;
};
请注意,仅当此版本要求您打印 Fizzbuzz 而不是 FizzBuzz 时,%15 的第三个 if 语句才是必需的。
for(let x = 0; x <=30; x++) {
if (x % 15 === 0) {
console.log('Fizzbuzz')
} else if (x % 5 === 0) {
console.log('Buzz')
} else if (x % 3 === 0) {
console.log('Fizz')
} else {
console.log(x)
}
}
我就是这样处理的