I've got a course task to make a calculator in Javascript. I've got the functions for the different operators and the case-switch but I'm struggling with how to print the return values of the functions. Here's the code I've got so far:
let firstValue = prompt("Enter a number");
let secondValue = prompt("Enter a second number");
let operation = prompt("How should these numbers interact");
function addition(firstValue, secondValue) {
return firstValue secondValue;
}
function subtraction(firstValue, secondValue) {
return firstValue - secondValue;
}
function division(firstValue, secondValue) {
return firstValue / secondValue;
}
function multiplication(firstValue, secondValue) {
return firstValue * secondValue;
}
function powerTo(firstValue, secondValue) {
return firstValue ^ secondValue;
}
switch (operation) {
case " ":
addition();
break;
case "-":
subtraction();
break;
case "/":
division();
break;
case "*":
multiplication();
break;
case "^":
powerTo();
break;
default:
console.log("No operation inputted");
break;
}
console.log(`${firstValue} ${operation} ${secondValue} =`)
CodePudding user response:
Assign the result of calling the operation function to a variable, then display that in the console.
You also need to pass arguments to all the functions.
And you should convert the input to a number before using it in calculations. Most of the arithmetic operators will convert it automatically, but
will do string concatenation.
let firstValue = Number(prompt("Enter a number"));
let secondValue = Number(prompt("Enter a second number"));
let operation = prompt("How should these numbers interact");
function addition(firstValue, secondValue) {
return firstValue secondValue;
}
function subtraction(firstValue, secondValue) {
return firstValue - secondValue;
}
function division(firstValue, secondValue) {
return firstValue / secondValue;
}
function multiplication(firstValue, secondValue) {
return firstValue * secondValue;
}
function powerTo(firstValue, secondValue) {
return firstValue ^ secondValue;
}
let result;
switch (operation) {
case " ":
result = addition(firstValue, secondValue);
break;
case "-":
result = subtraction(firstValue, secondValue);
break;
case "/":
result = division();
break;
case "*":
result = multiplication(firstValue, secondValue);
break;
case "^":
result = powerTo(firstValue, secondValue);
break;
default:
console.log("No operation inputted");
break;
}
console.log(`${firstValue} ${operation} ${secondValue} = ${result}`)
CodePudding user response:
There are a couple of things wrong with your code.
First you need to save the result of the function call to a variable, second you need to pass the arguments to the function and finally in javascript exponents are done using the **
operator not the ^
operator, ^
is used for a bitwise xor.
Here is your code when it is fixed:
let firstValue = prompt("Enter a number");
let secondValue = prompt("Enter a second number");
let operation = prompt("How should these numbers interact");
function addition(firstValue, secondValue) {
return firstValue secondValue;
}
function subtraction(firstValue, secondValue) {
return firstValue - secondValue;
}
function division(firstValue, secondValue) {
return firstValue / secondValue;
}
function multiplication(firstValue, secondValue) {
return firstValue * secondValue;
}
function powerTo(firstValue, secondValue) {
return firstValue ** secondValue;
}
let result;
switch(operation) {
case " " :
result = addition(firstValue, secondValue);
break;
case "-":
result = subtraction(firstValue, secondValue);
break;
case "/":
result = division(firstValue, secondValue);
break;
case "*":
result = multiplication(firstValue, secondValue);
break;
case "^":
result = powerTo(firstValue, secondValue);
break;
default:
console.log("No operation inputted");
break;
}
console.log(`${firstValue} ${operation} ${secondValue} = ${result}`);
However in this case I feel that separating the operations into functions is unnecessary. Here is a cleaned up version:
let firstValue = prompt("Enter a number");
let secondValue = prompt("Enter a second number");
let operation = prompt("How should these numbers interact");
let result;
switch(operation) {
case " " :
result = firstValue secondValue;
break;
case "-":
result = firstValue - secondValue;
break;
case "/":
result = firstValue / secondValue;
break;
case "*":
result = firstValue * secondValue;
break;
case "^":
result = firstValue ** secondValue;
break;
default:
console.log("No operation inputted");
break;
}
console.log(`${firstValue} ${operation} ${secondValue} = ${result}`);
CodePudding user response:
EDIT: everyone answered at the same time with the same thing so I thought I would spice my answer up with some unsafe code
const firstValue = prompt("Enter a number");
const secondValue = prompt("Enter a second number");
const operation = prompt("How should these numbers interact");
const expression = `${firstValue} ${operation} ${secondValue}`;
const result = eval(expression);
console.log(`${expression} = ${result}`);
CodePudding user response:
Another way of solving the problem. More complicated, but safe and clean.
function getNumber(message) {
let number;
do {
number = prompt(message);
if (isNaN(number)) {
alert(`${number} is not a number, try again.`);
} else break;
} while (true);
return parseInt(number);
}
function add(offset, x) {
return offset x;
}
const operations = {
" ": add,
};
const firstNumber = getNumber("Enter the first number");
const secondNumber = getNumber("Enter the second number");
let operation;
do {
operation = prompt("How should these numbers interact");
if (!operations[operation]) {
alert(operation " is not supported");
} else break;
} while (true);
const calculate = operations[operation];
const result = calculate(firstNumber, secondNumber);
alert("Answer is " result);