[ios开发]如何编写一个计算器
1. 用到的知识点
- mvc设计模式
- Masonry布局
- 用到了算法:栈 来进行计算更加方便(c语言简易表达式求值)
2.笔记
一、实现表达式求值有两种方法
-
中缀转后缀
这篇博客讲解比较好 到底什么是后缀表达式 又是怎么转化的 - 直接用中缀表达式进行计算
二、栈的基本思想
按照基本思想 View里写每个按钮 并且使用Masonry进行布局(应该使用百分比)
- 通过观察计算器按钮的布局 发现前四排是一样的形状 最后一排0的形状与其他不同 所以通过循环来建立了前四行按钮 然后再单独创建3个按钮即可
- 在循环创建按钮中,通过不同的i,j来确定不同的setTitle、颜色和tag值
-
每一个的点击事件对应的都是(click:)传入需要的button 并且通过协议传值将button传向View界面 然后在VC中直接调用传递的方法中的参数button的tag值来确定具体的点击对象
ViewController中
定义两个NSMutableString来存放获取的值, 通过appendString进行不断附加到两个NSMutableString中(为什么是两个?后面会有一个加结束符的操作如果一直用一个 那么这个结束符就保存到数组中直接输出了)同样在viewcontroller中进行获取时的一些判错问题以及最后答案删除多余0的问题
在一系列判断结束后 如果按下‘=’那么就将我们获取的数组赋值给model的数组 在model中进行判断与计算 需要注意在赋值时在最后再添一个井号为输入结束判断符以确保输入结束
在Model中首先需要两个NSMutableArray型数组,一个就是运算符的栈,一个是数字的栈 思想和c直接拿中缀式一样 不过语言变成了oc 并且没有用结构体而是用两个数组 所以函数也有一定的改变 简单的入栈(通过强制类型转换强行插入到需要数组的) 出栈(remove最后一个元素) 获取栈顶元素(没有这个函数 因为可以直接通过数组的最后一个元素来决定)其他差不多
还有最重要的一块 NSArray即oc里的数组,它可以保存不同的对象,但不能保存基本数据类型,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。所以我们需要导出其中的数组时 将需要的数组元素进行强制转换然后才能进行加减乘除进行计算
有了此处代码,我们进行就可以进行下面这样强制类型转换然后进行计算了
本文地址:https://blog.csdn.net/m0_46110288/article/details/109033315