2012-10-27 20 views
0

這是我的代碼添加如果特殊情況的條件

for(var i = 1; i <= 20; i = i + 1) 

if(i%3==0) { 
    console.log("Fizz"); 
}else if (i%5==0){ 
    console.log("Buzz"); 
} 
else { 
    console.log(i); 
} 

答案是

1 
2 
Fizz 
4 
Buzz 
Fizz 
7 
8 
Fizz 
Buzz 
11 
Fizz 
13 
14 
Fizz 
16 
17 
Fizz 
19 
Buzz 

不過看,「十五」 ...它說:「菲斯」,但它應該是「FizzBu​​zz 「因爲它可以被3和5整除。糟糕! 如何添加特殊條件這種情況下

回答

5

當你做if else if,你不要在else if第一條件被驗證通過。

這裏是一個可能的解決問題的方法(有很多,沒有很優雅):

var special = false; 
if (i%3==0) { 
    console.log("Fizz"); 
    special = true 
} 
if (i%5==0){ 
    console.log("Buzz"); 
    special = true; 
} 
if (!special) { 
    console.log(i); 
} 

這裏的另一個問題:

var tolog = ''; 
if (i%3==0) { 
    tolog += "Fizz"; 
} 
if (i%5==0){ 
    tolog += "Buzz"; 
} 
console.log(tolog || i); 

Demonstration

3

你不應該寫else if

for(var i = 1; i <= 20; i = i + 1) 

    if(i%3==0) { 
     console.log("Fizz"); 
    } 
    if (i%5==0){ 
     console.log("Buzz"); 
    } 
    if (i%5 && i%3) { 
     console.log(i); 
    } 
} 
2

如果使用if-else,則只執行其中一個分支。你需要有不同的結構。

for (var i ...) { 
    if (i % 3 !== 0 && i % 5 !== 0) { 
    console.log(i); 
    } else { 
    if (i % 3 === 0) { console.log('Fizz'); } 
    if (i % 5 === 0) { console.log('Buzz'); } 
    } 
} 
1

而不是立即行動,需要一些時間來進一步考慮您的輸入。如果你非常小心,你可以避免像mod這樣的重複操作(%3 &%5)。

var result; 
for(var i = 1; i <= 20; i = i + 1) 
{ 
    result = ''; 

    if(i%3==0) 
     result += 'Fizz'; 

    if(i%5==0) 
     result += 'Buzz'; 

    // if neither of the two preceding statements assigned a value to result 
    // then it's not divisible by either - just print the number. 
    if (result.length == 0) 
     result = i; 

    console.log(result); 
} 
1

我會組如果像結構法等等

var i = 0; 
while(++i < 21){ 
    if (i % 3 === 0) { 
     if (i % 5 === 0) console.log('FizzBuzz'); // Special case 
     else console.log('Fizz'); 
    } 
    else if (i % 5 === 0) { 
     console.log('Buzz'); 
    } 
    else console.log(i); 
} 

的一些這裏給出的答案jsPerf