all tests pass!

This commit is contained in:
Andrzej Stepien 2023-07-06 12:08:28 +02:00
parent 4037be8b05
commit da9924b7bd
1 changed files with 32 additions and 21 deletions

View File

@ -3,7 +3,6 @@ import KeyPad from "./KeyPad";
export default function Calculator(props){ export default function Calculator(props){
const [main,setMain] = useState("0") const [main,setMain] = useState("0")
const [mainInitialised, setMainInitialised] = useState(true)
const [memory,setMemory] = useState("") const [memory,setMemory] = useState("")
const [operation,setOperation] = useState("") const [operation,setOperation] = useState("")
@ -14,7 +13,7 @@ export default function Calculator(props){
}else{ }else{
setMain(prev=>prev+numberString) setMain(prev=>prev+numberString)
} }
setMainInitialised(false)
}, },
zero:function(){this.conc("0")}, zero:function(){this.conc("0")},
@ -39,16 +38,27 @@ export default function Calculator(props){
divide:function(){this.rcvOperator("divide")}, divide:function(){this.rcvOperator("divide")},
rcvOperator:function(operator){ rcvOperator:function(operator){
const operatorAlreadyEntered = operation===""?false:true if(main==="-"){
console.log(operatorAlreadyEntered) setMain("")
setOperation(operator) }else if(main!==""){
if(!mainInitialised && !operatorAlreadyEntered){ if(memory===""){
setMemory(prev=>{return this.calculate(main,prev)}) setMemory(main)
}else{ }else{
setMemory(main) setMemory(prev=>{return this.calculate(main,prev)})
}
setMain("")
} }
setMainInitialised(true) if(main==="" && operator==="subtract"){
setMain("0") setMain(prev=>{
if(prev[0]!=="-"){
return "-"+prev
}
})
}else{
setOperation(operator)
}
}, },
operations:{ operations:{
@ -60,16 +70,18 @@ export default function Calculator(props){
clear:()=>{ clear:()=>{
setMain("0") setMain("0")
setMainInitialised(true)
setMemory("") setMemory("")
setOperation("") setOperation("")
}, },
equals:function(){ equals:function(){
setMain(prev=>{ if(operation!=="" && main !==""){
return this.calculate(prev,memory) setMain(prev=>{
}) return this.calculate(prev,memory)
setMemory("") })
setOperation("") setMemory("")
setOperation("")
}
}, },
calculate:function(a,b){ calculate:function(a,b){
return this.operations[operation](parseFloat(a),parseFloat(b)).toString() return this.operations[operation](parseFloat(a),parseFloat(b)).toString()
@ -84,10 +96,9 @@ export default function Calculator(props){
return( return(
<> <>
<div id="display-container"> <div id="display-container">
<p id="memory">{memory}</p> <p id="memory">{"memory: "+memory}</p>
<p id="display">{main}</p> <p id="display">{main}</p>
<p id="operation">{operation}</p> <p id="operation">{"operation: "+operation}</p>
<p>{JSON.stringify(mainInitialised)}</p>
</div> </div>
<KeyPad handleInput={handleInput}/> <KeyPad handleInput={handleInput}/>