这是我的FizzBuzz尝试
for (i=1;i<=20;i++) {
if (i % 3 == 0 && i % 5 !== 0) {
console.log ("Fizz");
}
else if (i % 3 ==0 && i % 5 == 0) {
console.log ("FizzBuzz");
}
else if (i % 5 ==0 && i % 3 !== 0){
console.log ("Buzz");
}
else {
console.log (i);
}
};
&#13;
Codecademy接受它是正确的,但我想确保它确实如此。 非常感谢你提前。 附:我真诚地希望这次我的问题不是太模糊或抽象或偏离主题:)
答案 0 :(得分:1)
这是正确的,但很冗长。
让我们稍微分解一下这个任务。你有两个因素:它是3的倍数,它是5的倍数吗?当然,它可以是两个,也可以不是,共计四个案例。像这样:
| Not x5 | x5
-------+--------+---------
Not x3 | number | Buzz
x3 | Fizz | FizzBuzz
您可以非常简单地在代码中表示:
function getFizzBuzz(n) {
if(n%5) { // not x5
if(n%3) // not x3 either
return n;
else // x3
return 'Fizz';
}
else {
if(n%3)
return 'Buzz';
else
return 'FizzBuzz';
}
}
然后就开始循环:
for(i=1; i<=20; i++) console.log(getFizzBuzz(i));
如果你真的想要,你可以使你的代码超级紧凑。当然,可读性要低得多!
function getFizzBuzz(n) {
return n%5?(n%3?n:'Fizz'):(n%3?'Buzz':'FizzBuzz');
}
有很多方法可以完成此任务。不同之处在于,其他程序员稍后可以轻松阅读您的代码。
答案 1 :(得分:0)
我认为它可以有多种解决方案,就像Niet指出的那样,它可以让它更具可读性。
这是我的Working Fiddle
版本代码:
for (var a = 1; a <= 20; a++) {
var log = (a % 3 == 0 && a % 5 == 0) ? 'fizzbuzz' : null;
if (!log) log = a % 3 == 0 ? 'fizz' : null;
if (!log) log = a % 5 == 0 ? 'buzz' : null;
if (log) console.log(log);
else console.log(a);
}
答案 2 :(得分:0)
我认为你的解决方案很好。它本身也很可读 - 这是编程中的大交易。
我建议的唯一的事情是从3和5检查的倍数开始(所以你可以删除不多次检查),使用strick等比较运算符(===
),并改变你的代码风格a很少 - 再次,可读性巨大。 (我建议的一些风格改变可能不会被推荐,这取决于你最终为谁工作或与之相关,所以请他们加入一粒盐。)
以下是代码形式的建议:
for (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)
};
答案 3 :(得分:0)
有很多方法可以做到这一点,但重要的是遵循编码指南并使其更简单易读。
class fizzbuzz {
constructor(fizz,buzz,length){
this.fizz = fizz;
this.buzz = buzz;
this.length = length;
}
output() {
for(let i = 0; i < this.length; i++){
console.log(this.getFizzBuzz(i));
}
}
getFizzBuzz(i) {
if(i % this.fizz == 0 && i % this.buzz == 0 )
return 'fizzbuzz'
else
return i % this.fizz == 0 ? 'fizz' : 'buzz';
}
}
new fizzbuzz(3,5,100).output();
&#13;
答案 4 :(得分:0)
您会说这是回旋处吗?我有点喜欢这开始的地方,但是可能有一种更好的方法。
编辑:尽管我的其他解决方案肯定比其他XD更使我冗长,但看起来要多一些。
//declare the three arrays to store variables
var threeArray = [];
var fiveArray = [];
var threeFiveArray = [];
//prep your fizzes
for (i = 3; i < 100; i+=3){
threeArray.push(i);
}
//prep your buzzes
for (i = 5; i < 100; i+=5){
fiveArray.push(i);
}
//iterate through 0-99 to see if any of the numbers are in fizz, buzz, or both.
for (i = 0; i < 100; i++){
if(threeArray.includes(i) && fiveArray.includes(i)){
threeFiveArray.push(i + ' fizzbuzz');
} else if(threeArray.includes(i)){
threeFiveArray.push(i + ' fizz');
} else if(fiveArray.includes(i)){
threeFiveArray.push(i + ' buzz');
}
}
//return your results
console.log(threeFiveArray);