迷宫问题回溯算法详解:如何用DFS找出所有路径
2026/8/7 12:41:44
计算器(Calculator)是一款功能完整的科学计算器应用。支持加减乘除四则运算、连续运算、历史记录、内存存储等功能。该应用深入展示了ArkTS框架中的表达式解析算法、状态驱动的UI更新、历史记录管理和边界条件处理技术。
| 功能模块 | 功能描述 | 技术实现 |
|---|---|---|
| 数字输入 | 多位数字和浮点数 | 字符串拼接 |
| 四则运算 | 加减乘除运算 | 运算引擎 |
| 连续运算 | 多步连续计算 | 状态保持 |
| 历史记录 | 计算历史查看 | 数组存储 |
| 内存功能 | MC/MR/M+/M- | 独立存储 |
| 清空功能 | C/CE/退格 | 状态重置 |
classCalculatorEngine{privatedisplay:string='0';privatepreviousValue:number=0;privatecurrentValue:string='';privateoperator:string='';privateisNewInput:boolean=true;privatememory:number=0;privatehistory:string[]=[];inputDigit(digit:string):void{if(this.isNewInput){this.currentValue=digit;this.display=digit;this.isNewInput=false;}else{if(this.currentValue.length>=15)return;this.currentValue+=digit;this.display=this.currentValue;}}inputDecimal():void{if(this.isNewInput){this.currentValue='0.';this.display='0.';this.isNewInput=false;return;}if(this.currentValue.includes('.'))return;this.currentValue+='.';this.display=this.currentValue;}performOperation(op:string):void{if(this.operator&&!this.isNewInput){this.calculate();}else{this.previousValue=parseFloat(this.display);}this.operator=op;this.isNewInput=true;}calculate():void{constcurrent=parseFloat(this.currentValue);letresult=0;switch(this.operator){case'+':result=this.previousValue+current;break;case'-':result=this.previousValue-current;break;case'×':result=this.previousValue*current;break;case'÷':result=current!==0?this.previousValue/current:0;break;}this.display=result.toString();this.previousValue=result;this.currentValue=result.toString();this.history.push(this.previousValue+' '+this.operator+' '+current+' = '+result);}}build(){Column(){// 显示区域Text(this.display).fontSize(40).textAlign(TextAlign.End).width('90%').padding(10)// 功能按钮行Row(){ForEach(['MC','MR','M+','M-'],(btn:string)=>{Button(btn).fontSize(12).width(60).height(40).onClick(()=>this.memoryOperation(btn))})}// 数字按钮ForEach(this.buttons,(row:string[])=>{Row(){ForEach(row,(btn:string)=>{Button(btn).width(btn==='0'?130:60).height(55).fontSize(22).backgroundColor(this.getButtonColor(btn)).fontColor(this.getButtonTextColor(btn)).borderRadius(12).margin(3).onClick(()=>this.onButtonClick(btn))})}})}}handleEdgeCases():void{// 除零处理if(this.operator==='÷'&&parseFloat(this.currentValue)===0){this.display='Error';this.resetState();return;}// 数值溢出if(this.display.length>15){this.display=parseFloat(this.display).toExponential(6);}// 连续小数点if(this.currentValue.includes('.')&&this.lastInput==='.')return;}