Passing 15 out of 16
Stuck on number 13
I can get 5 * - 5
to evaluate to -25 or
5 * - + 5
to equal 10…
but not both at the same time
anything I come up with feels really hacky and would most likely break other more normal operations.
Passing 15 out of 16, for the Calculator at FreeCodeCamp.com
repo
live demo, be sure to use the NavBar to get to Calculator
use the hamburger menu on the top left and select JavaScript Calculator to run the test suite, they say it’s designed for Chrome and may encounter bugs in other browsers.
Calculator.js
handleClick = (buttonName) => {
let { displayNumber, operatorFlag, decimalFlag } = this.state;
// let lastChar = displayNumber[displayNumber.length - 1];
switch (true) {
// 24:00
case buttonName === "0" ||
buttonName === "1" ||
buttonName === "2" ||
buttonName === "3" ||
buttonName === "4" ||
buttonName === "5" ||
buttonName === "6" ||
buttonName === "7" ||
buttonName === "8" ||
buttonName === "9":
if (displayNumber !== "0") {
displayNumber += buttonName;
operatorFlag = false;
} else {
displayNumber = buttonName;
}
break;
case buttonName === "-":
if (!operatorFlag) {
displayNumber += buttonName;
operatorFlag = true;
this.setState({ decimalFlag: false });
} else {
// const newNumber = displayNumber.slice(0, displayNumber.length - 1);
// displayNumber = newNumber;
displayNumber += buttonName;
operatorFlag = true;
this.setState({ decimalFlag: false });
}
break;
//25:00
case buttonName === "+" ||
buttonName === "-" ||
buttonName === "*" ||
buttonName === "/":
if (!operatorFlag) {
displayNumber += buttonName;
operatorFlag = true;
this.setState({ decimalFlag: false });
} else {
const newNumber = displayNumber.slice(0, displayNumber.length - 1);
displayNumber = newNumber;
displayNumber += buttonName;
}
break;
//33:00 clear
case buttonName === "C":
displayNumber = "0";
operatorFlag = false;
this.setState({ decimalFlag: false });
break;
//35:00
case buttonName === "=":
displayNumber = evaluate(displayNumber);
operatorFlag = false;
this.setState({ decimalFlag: true });
break;
//38:00
case buttonName === ".":
if (!decimalFlag) {
displayNumber += ".";
this.setState({ decimalFlag: true });
}
break;
default:
}
this.setState({ operatorFlag });
this.setState({ displayNumber });
};