2014-10-23 9 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() '. Он уже определен в глобальном масштабе. Кроме того, используйте оператор 'switch' в свой метод' assign() 'вместо if/else. –

ответ

3

Вы звоните ответ() в этой функции:

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

Но вы также называют assignment(), который вызывает в ответ на answer() функцию:

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 должен всегда быть используется с параметром parseInt(x,10), добавленным, если вы хотите разбор в десятичной системе.

2

Вы просто вызываете функцию answer() дважды. Вы не должны вызывать его из вашего main(), так как это случай, когда ваша переменная (operator) не определена.

+0

Где? Я знаю, что это происходит, но я не понимаю, где. Я сознательно называю это в main(). – musikluver2003

+0

И в каждом задании – talnicolas

0

В первый раз это называют от присвоения функции, когда оператор определяется

следующий раз, когда он вызывается из главного функции, где оператор не определен

поэтому ошибка

Смежные вопросы