Новое для 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();
}
}
Может вам добавить HTML? –
вы меняете условия своей цепочки 'if(). вы проверяете оператора, а затем ИЗМЕНИТЬ ЭТОГО, как только матч будет выполнен. Это никогда не является хорошей идеей, хотя в этом случае вам повезло и не меняют ее на что-то, что повлияет на фактические операции. –
Несколько предложений: удалить 'operator' из ваших параметров в метод' answer() '. Он уже определен в глобальном масштабе. Кроме того, используйте оператор 'switch' в свой метод' assign() 'вместо if/else. –