2014-10-23 4 views
0

JS에 익숙하지만 여전히 배우고 있지만 학교용 계산기를 쓰고 있습니다. 나는 꽤 많이 끝났고 모든 꼬임을 해결했지만 작은 문제가있어 정확하게 찾아 낼 수 없습니다. 어떤 도움을 주셔서 감사합니다. 모든 것이 작동하지만 "응답"기능은 두 번 연속 호출됩니다. 처음 나타 났을 때 모든 것이 옳았지만 두 번째로 내 변수 중 하나가 정의되지 않은 것으로 표시됩니다. 나는 분명히 처음으로 올바르게 보여 주기만하면된다. 내가 뭘 놓치고 있니?이 함수가 두 번 호출하는 이유는 무엇입니까?

var number1; 
var number2; 
var operator; 
var total; 
var runagain; 

function main() 
{ 
    inputNumbers(); 
    assignment(); 
    answer(); 
    keepgoing(); 
} 

function inputNumbers() 
{ 
    number1 = parseInt(prompt("Enter Your First Number", 0)); 
    while(isNaN(number1)) 
    { 
     alert("You did not enter a valid number. Please try again."); 
     number1 = parseInt(prompt("Enter Your First Number", 0)); 
    } 
    number2 = parseInt(prompt("Enter Your Second Number", 0)); 
    while(isNaN(number2)) 
    { 
     alert("You did not enter a valid number. Please try again."); 
     number2 = parseInt(prompt("Enter Your Second Number", 0)); 
    } 
} 

function assignment() 
{ 
    operator = parseInt(prompt("Enter a '1' for addition\n" + "Enter a '2' for subtraction\n" + "Enter a '3' for multiplication\n" + "Enter a '4' for division\n" + "Enter a '5' for modulus/remainder")); 

    if(operator == 1) 
    { 
     add(); 
     operator = " + "; 
     answer(operator); 
    } 

    else if(operator == 2) 
    { 
     subtract(); 
     operator = " - "; 
     answer(operator); 
    } 
    else if(operator == 3) 
    { 
     multiply(); 
     operator = " * "; 
     answer(operator); 
    } 
    else if(operator == 4) 
    { 
     divide(); 
     operator = "/"; 
     answer(operator); 
    } 
    else if(operator == 5) 
    { 
     modulus(); 
     operator = " % "; 
     answer(operator); 
    } 
} 

function add() 
{ 
    total = number1 + number2; 
} 

function subtract() 
{ 
    total = number1 - number2; 
} 

function multiply() 
{ 
    total = number1 * number2; 
} 

function divide() 
{ 
    total = number1/number2; 
} 

function modulus() 
{ 
    total = number1 % number2; 
} 

function answer(operator) 
{ 
    alert("Your calculation was: " + number1 + operator + number2 + " = " + total); 
} 

function keepgoing() 
{ 
    runagain = confirm("Would you like to make another calculation?"); 

    if(runagain === true) 
    { 
     main(); 
    } 
} 
+0

을 할 수 정의되지 않은 주요 함수에서 호출되는 다음 시간을 정의 할 때이 할당 함수에서의 호출 처음 HTML을 추가 하시겠습니까? –

+0

당신은'if()'체인의 조건을 변경하고 있습니다. 연산자를 테스트 한 다음 일치가 완료되면 변경합니다. 그것은 결코 좋은 생각은 아니지만,이 경우에 당신은 운이 좋았고 실제 운영에 영향을 미칠 수있는 모양으로 바꾸지 않았습니다. –

+0

몇 가지 제안 : 매개 변수에서'operator()'를'answer()'메소드로 제거하십시오. 이미 글로벌 범위에 정의되어 있습니다. 또한, if/else 대신에'assign()'메쏘드에서'switch' 문을 사용하십시오. –

답변

3

이 기능에 대한 답변()를 호출하고 있습니다 :

function main() 
{ 
inputNumbers(); 
assignment(); 
answer(); // <- here 
keepgoing(); 
} 

을하지만 당신은 답례로 answer() 함수를 호출 assignment(), 전화 :

function assignment() 
{ 
    operator = parseInt(prompt("Enter a '1' for addition\n" + "Enter a '2' for subtraction\n" + "Enter a '3' for multiplication\n" + "Enter a '4' for division\n" + "Enter a '5' for modulus/remainder")); 

    if(operator == 1) 
    { 
     add(); 
     operator = " + "; 
     answer(operator); // <- here, and also in subsequents if/else blocks 
    } 

... 

사이드 참고 : parseInt 항상되어야한다 10 진수 시스템에서 구문 분석하려는 경우 parseInt(x,10) 매개 변수가 추가되었습니다.

2

단순히 answer() 함수를 두 번 호출해야합니다. 변수 (operator)가 정의되지 않은 경우이므로 main()에서 호출하지 마십시오.

+0

어디서? 나는 그것이 일어나는 것을 알고 있지만, 나는 어디에서 왔는지 이해하지 못한다. 저는 고의로 main()에서 호출하고 있습니다. – musikluver2003

+0

그리고 모든 과제마다 – talnicolas

0

운영자가

이 연산자는 따라서 오류

관련 문제