我的FizzBu​​zz尝试

时间:2015-02-13 07:27:29

标签: javascript fizzbuzz

这是我的FizzBu​​zz尝试



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;
&#13;
&#13;

Codecademy接受它是正确的,但我想确保它确实如此。 非常感谢你提前。 附:我真诚地希望这次我的问题不是太模糊或抽象或偏离主题:)

5 个答案:

答案 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)

有很多方法可以做到这一点,但重要的是遵循编码指南并使其更简单易读。

&#13;
&#13;
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;
&#13;
&#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);