2015-02-05 6 views
0

숫자에 따라 Fizz, Buzz 또는 Fizzbuzz를 출력하는 기능을 3, 5 또는 둘로 나눌 수 있습니다. (이것은 내 뜻입니다 : http://en.wikipedia.org/wiki/Fizz_buzz)for 루프로 Fizzbuzz 게임

이것은 내가 붙어 있기 전에 얼마나 멀리 도착했는지입니다.

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; 
}; 

나는 이유를 모르겠다.

그냥 명확히하십시오. 1,2, Fizz, 4, 버즈, Fizz, 7,8, Fizz, 버즈, 11, Fizz, 13,14, Fizz 버즈, 16,17, Fizz, 19, 버즈 , Fizz, 22,23, Fizz, Buzz, 26, Fizz "등"정지 "에 따라 다릅니다.

+2

for 루프에는 대괄호가 없으므로 var string = ','; 루프 내에서 실행됩니다. –

+0

대괄호 {} 또는 []가 있습니까? 나는 또한 나는 여전히 자바 스크립트에 매우 새롭다 고 덧붙이고 싶다. – micke

답변

1

Valentins 의견이 정확합니다. 루프 주위에 대괄호를 추가해야합니다. 그러나 루프의 모든 반복에서 문자열 var를 다시 정의 할 수도 있습니다.

또한

그렇게

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; 
}; 

이 유지하는 최선의 방법이 아니다처럼 뭔가 이동 FizzBuzzFizzBuzz 비트 3 문을 칠 것입니다 예를 들어 15으로 잘못 인쇄 출력을 만드는 경우

마지막 쉼표를 추가 할 위치를 추적하지만 작업은 수행합니다.

0

당신은 당신은 x <= stop까지 실행되는

for (var x=1;x <= stop; x++) 
    var string =','; 

이 루프

에 대한 귀하를 수정해야합니다.

Javascript를 사용하면 한 줄의 명령문을 실행하려는 경우 대괄호를 사용하지 않아도됩니다.

if (a===true) 
    alert(a); // This is executed when a === true 

alert(b); // This is always executed no matter what a is 

여기서 들여 쓰기는 포인트를 만들지 만 if 문은 첫 번째 세미콜론까지 모든 것을 실행합니다. 당신이 문은 중괄호 모든 것을 실행한다면 너무

// Alert a and alert b are only executed if a is true 
if (a===true) { 
    alert(a); 
    alert(b); 
} 

등 중괄호를 사용하도록 선택할 것 a === true 경우 여러 줄의 코드를 수행하기를 원한다면 한편

.

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. 
}; 
+0

이 구현은 저에게 답을줍니다 : "Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, Fizz 버즈, " – micke

+0

실제로 그것을 확인하지 않기 때문에 나에게 도움이된다. 다시 한번보세요. 모든 값은'(x % 3 === 0 && x % 5 === 0)'이 아닌 모든 숫자에 대해 true인지 '확인 (x % 3 && x % 5)'했기 때문에 모든 값은 fizz 버즈였습니다. 피들이 있습니다 http://jsfiddle.net/Lm44axy7/ – Deepak

+0

그게 완벽하게 작동합니다! 대답에서 ","을 제거 할 수있는 방법을 알고 있습니까? 나는 마지막 값 후에 이것을 얻고있다. 그것은 다음과 같이 끝납니다 : "22,23, Fizz, Buzz, 26, Fizz," – micke

0

여러 문제점이 함께 있습니다 (1) 구조

for (var x=1;x <= 10; x++) 
    statement; 
otherstatement; 

문 (10)를 실행합니다 다른 명령문을 실행하기 전에 몇 번.중괄호가 없으면 Javascript는 다음 문이 for 루프의 내용이라고 가정합니다.

(2) string 변수는 이전 버전을 제거하는 모든 루프에서 다시 정의되므로 return 문은 string의 마지막 값만 인쇄합니다.

(3) fizzBuzz if 문의 논리가 잘못되었습니다. 이를 15로 나누는 명령문에 대해 수행하면 3 개의 명령문이 모두 실행됩니다. 따라서 세 번째 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; 
    }; 

주 그 세 번째 15 %에 대한 문은 필요한 경우에만 경우 오히려 FizzBuzz보다 Fizzbuzz를 인쇄이 버전의 요구.

+0

을 도울 수 있다면 더 : 구문 에러 :없는 변수 이름 \t VAR 함수를 (시작, 중지) { – micke

+0

미안 해요, 내가 놓친 선언에있는 함수의 이름, 그리고 거기에 몇 가지 다른 구문 오류가 발생했습니다. 나는 구문 오류가 전혀없는 텍스트 편집기에서 신뢰할 수있는 js를 사용하기에 정말로 유창하지 않습니다. 컴파일을 시도 했어야합니다. –