2017-06-05 54 views
-3

我试图打印是被3整除和5 对于整除数3个数字,打印出“嘶嘶声”。 对于由5整除的数字,打印出“口碑”。 对于由两个3和5整除数,在 控制台打印出“FizzBu​​zz”。否则,只需打印出数字即可。如何打印具有相同条件的值 - 的JavaScript

尝试这些代码:

var i; 

for(i = 1; i <= 20; i++){ 
    if(i % 3 === 0){ 
    console.log("Fizz"); 
    }else if(i % 5 === 0){ 
    console.log("Buzz"); 
}else if(i % 3 === 0 && i % 5 === 0){ 
     console.log("FizzBuzz"); 
    }else { 
    console.log(i);  
} 
} 

但似乎它传递出第三否则,如果... 有没有更好的方式来做到这一点?

+6

根据[Marijn Haverbeke(http://eloquentjavascript.net/02_program_structure.html),这实际上是一直声称淘汰程序员候选人显著比例的面试问题。所以,如果你没有解决这个问题,那么你在采访中不会对自己的机会感到满意。 –

+2

@GerardoFurtado,很有趣。 –

回答

3

你可以合并comparsion移动到比较顶部,因为如果两个条件均满足,你不需要检查等。为相同的结果

var i; 
 

 
for (i = 1; i <= 20; i++) { 
 
    if (i % 3 === 0 && i % 5 === 0) { // check first, includes 
 
     console.log("FizzBuzz"); 
 
    } else if (i % 3 === 0) {   // this comparison and 
 
     console.log("Fizz"); 
 
    } else if (i % 5 === 0) {   // this as well. 
 
     console.log("Buzz"); 
 
    } else { 
 
     console.log(i); 
 
    } 
 
}

+0

代替'如果(ⅰ%3 === 0 &&则i%5 === 0)'我们不能有'如果(ⅰ%15 === 0)'? –

+0

正确的,但我认为这个问题是关于比较的顺序。 –

1

更少的代码:

for(var i = 1; i <= 20; i++) { 
 
    var output = ''; 
 
    if(i % 3 === 0) output += 'Fizz'; 
 
    if(i % 5 === 0) output += 'Buzz'; 
 
    console.log(output.length > 0 ? output : i); 
 
}

1

许多由两个数整除必须通过Least common multiple,在这种情况下是整除15.你也必须移动这个检查,所以它的缺点在其他陈述之前被理解。

for (var i = 1; i <= 20; i++) { 
    if (i % 15 == 0) 
     console.log('FizzBuzz'); 
    else if (i % 3 === 0) 
     console.log("Fizz"); 
    else if (i % 5 === 0) 
     console.log("Buzz"); 
    else 
     console.log(i); 
} 
0
var i; 

for (i = 1; i <= 20; i++) { 
    if (i % 3 === 0 && i % 5 === 0) { 
     document.write("FizzBuzz"); 
    } else if (i % 3 === 0) {   
     document.write("Fizz"); 
    } else if (i % 5 === 0) {  
     document.write("Buzz"); 
    } else { 
     document.write(i); 
    } 
} 
相关问题